2012-05-16 112 views
3
**Update 2** 

我有一個典型的3層結構(UI /域/數據層)的項目。在領域層和數據實體層有兩個領域模型實體有什麼優點和缺點。域模型實體與數據實體,一個或兩個軟件架構

更改爲不同數據庫的可能性很小。數據層中只有數據實體作爲域模型實體有什麼優點和缺點?如果使用ORM有什麼區別(當使用ORM(NHibernate)時,是否有兩個實體都是好的做法)?

請發表您的想法或鏈接,文章,書籍。

更新3

在什麼情況下,我們應該同時使用域實體和數據實體?

回答

0

域模型應儘可能多地存在以最大化代碼重用和理解。當使用域模型時,例外是在時間,內存或運輸成本方面過於昂貴。

比方說,你有一個零件供應商。該供應商向您提供數千種零件,因此在這種情況下一對多可能會很大,尤其是考慮到每個零件可能帶來的類網。但是,您需要特定供應商提供的特定小部件清單。在這種情況下,您只需使用您需要的數據創建一個值對象。

此值對象可以是供應商對象的副本,僅包含您需要的部分,也可以是僅代表所需數據的全新類。

這個典型的用例可能是在網頁上顯示數據,以及通過json傳輸數據。

+0

從你的解釋,我說的是,在某些情況下,域模型可以存在於所有3層中,而沒有數據實體。德米特里友善的解釋? – Pingpong

+0

是的。絕對。這是一個性能與易於維護的問題。編寫和維護直接與域模型交互的代碼更容易。 –

1

假設你的問題是關於DDD的。在典型的DDD場景中,域實體通過數據層(通常很薄,因爲它使用ORM)「水合」。爲了保護域實體,數據層必須對域有深入的瞭解。如果使用ORM而不是單獨的'數據實體',ORM知道如何重構Domain對象。希望這可以幫助。

+0

謝謝!使用ORM時是否有兩個實體是好的做法 – Pingpong

+0

如果使用良好的ORM,則根本不需要「數據實體」,它會爲您執行映射。這是ORM的全部目的。 – Dmitry

+0

那麼數據層中的實體是域模型實體還是數據實體? – Pingpong

1

對域實體使用數據實體是一件棘手的事情,並且增加了另一個不必要的抽象層而不添加任何值。

您應該使用通過ORM或'anemic'數據模型(也通過ORM映射)映射的全功能域模型。哪一個取決於你的背景,要求和個人喜好。

在數據模型的情況下,您可能直接將表映射到實體(一對一),而沒有任何複雜的東西,如繼承層次結構映射。沒關係。棘手的是映射1:n關係。使用數據模型時,如果不代表對象模型中的「多」一側,它們往往會工作得很好。爲什麼?因爲如果您不添加自定義代碼來處理這些情況,則兩個關係端都很容易不同步。

在域模型的情況下,您可能使用存儲庫來獲取您的聚合根。

我寫的東西有例外。在CQRS架構中使用數據實體和域實體是合法的。

1

如果您的數據架構沒有完全映射到您的域實體上,則使用數據實體。例如,考慮一個電話號碼。在您的域名實體中,它可能是一個單一的屬性,而在數據庫中它可能由一個區號字段和一個電話號碼字段組成。

與某些答案所暗示的相反,數據訪問層不會保護您的域實體,也不會對它們有深入的瞭解。相反,您的域名層會向您的數據訪問層請求重建實例所需的數據。

相關問題