2014-07-15 72 views
1

我翻閱了一些關於在Spring中創建應用程序的文章和教程,以獲取有關如何將獨立(而非Web)Spring應用程序構建到圖層中的信息。如何在Spring應用程序中構建圖層和職責?

情況 - 我的應用程序將處理一些數據並使用它進行一些計算。數據將被存儲並從不同的數據源中讀取(PostgreSQL和RESTful API)。

我有一個想法如何構建我的程序:

  • 域對象com.example.domain) - 簡單的POJO類,如產品,訂單,客戶等
  • 服務層com.example.service) - 這些類將處理業務邏輯,並將與控制器和DAO對象協作,並將實現一些接口(ProductManager,OrderManager ...)。
  • DAO /存儲庫層com.example.repository) - 接口(ProductDao,OrderDao)定義原始數據操作。這些接口將實現特定的數據源(PostgreSQLProductDao等)。

問題:

  1. 這是正確的劃分,對你有意義?

  2. 當我使用另一個DAO實現時,應該在不影響服務類的情況下完成此切換?我在問,因爲數據處理由於另一種數據結構將以不同的方式處理。例如,當我使用來自另一個項目實例的相同數據庫(PostgreSQL),並且數據以不同形式存儲時,我需要執行不同的計算(從DAO層a調用另一個方法,並使用數據執行一些其他操作)。應該在服務層還是在DAO層完成?我應該爲每個項目和數據源有更多的服務層實現嗎?

例如:在我們的PostgreSQL數據庫中有一些客戶,其中一些客戶沒有其行中的所有信息。所以對於這個數據庫,我需要在從數據源讀取客戶之後獲取這些缺失的信息。因爲從我的角度來看,DAO應該只做基本操作(比如CRUDL)我不確定這是否應該在DAO層或服務層完成。

我看了很多文章,但是我還沒有找到明確的答案來回答這些問題。謝謝。

+0

對於獨立的應用程序,我強烈建議你看看[Spring Boot](http://projects.spring.io/spring-boot/)來引導應用程序和[Spring IO](http:// platform。spring.io/platform/)進行數據處理。避免像瘟疫一樣的所有XML。你的結構看起來很好。 –

回答

0

這種分離很有意義。

在專用層中分離數據訪問代碼的目標之一就是解決您所問的問題。服務層不應該關心客戶的存儲位置和方式,以及如何正確獲取所有必需的字段。這是DAO的責任。

因此,DAO實現應該關注從底層數據源獲取實體。

+0

那麼你的意思是服務層應該只有一個,DAO實現的責任是向服務提供所有和完全合格的數據?在我的情況下,創建另一個接口定義服務的實現可能是一個恰當的用例嗎? – user2148736

+0

我真的不能說,因爲它取決於你的應用程序真正做什麼。這可能是因爲你只會爲每個*生產代碼實現每個服務,並且沒有任何錯誤。但是您可能需要創建一些簡單的實現(思考存根或虛擬)某些服務,以便能夠基於此來測試其他服務。 –

相關問題