2012-05-01 67 views
0

根據許多程序員的說法,使用JPA時可以繞過DAO層。使用DDD方法的域層和DAO層

在使用DDD方法,域層構成基礎設施區域(含有像庫實現外部資源)和域區域的(用實體,需要值對象和存儲庫接口和服務等)。

因此,如果DOA層被跳過,那麼基礎設施區域應該是名爲「基礎設施」的包內的域層的一部分嗎?

如果基礎設施部分應該在分離的層中移動(分離項目以使事情更乾淨),域層和基礎層之間是否可接受循環依賴關係?實際上,實體和接口存儲庫必須共享

否則,我應該將實體和存儲庫接口與域層分開,以便將其視爲域和基礎設施共享的獨立事物嗎?

什麼是好習慣?

回答

1

在DDD中,數據訪問對象(DAO)是存儲庫。沒有「DAO層」,持久性是基礎設施層的一部分。

如上所述,存儲庫的契約(接口)在域層中定義,而其具體實現駐留在基礎結構層中。

由於實體應該是純粹的域對象,並不知​​道它們是如何被持久化,轉移到其他系統等等,所以域層不需要引用基礎設施。

「換句話說,每一層使用一個抽象接口, 代表它的基礎設施的需求,但不知道是什麼 基礎設施將被使用。它只是說這是需要通過 的抽象接口,並預期實施該基礎設施的接口並提供所需的功能。「

http://www.artima.com/weblogs/viewpost.jsp?thread=35139

+0

謝謝您的回答。 Spring IOC是在基礎設施和其他層之間保持DIP的良好選擇嗎? – Mik378

+0

當然。請參閱http://stackoverflow.com/questions/693221/ddd-where-to-keep-domain-interfaces-the-infrastructure top答案(StructureMap是一個IoC容器,就像Spring IoC一樣)。 – guillaume31

+0

很酷:)謝謝! – Mik378

1

DAO層和基礎架構區域/域區域不是一回事。在實施基礎設施/域區域時使用DAO層。

你的程序員是正確的,JPA是DAO層。您仍然需要基礎架構區域和域名區域。如果你必須在這兩個區域內實現一個DAO層,它們將會變得更小/差異化。