**Update 2**
我有一個典型的3層結構(UI /域/數據層)的項目。在領域層和數據實體層有兩個領域模型實體有什麼優點和缺點。域模型實體與數據實體,一個或兩個軟件架構
更改爲不同數據庫的可能性很小。數據層中只有數據實體作爲域模型實體有什麼優點和缺點?如果使用ORM有什麼區別(當使用ORM(NHibernate)時,是否有兩個實體都是好的做法)?
請發表您的想法或鏈接,文章,書籍。
更新3
在什麼情況下,我們應該同時使用域實體和數據實體?
**Update 2**
我有一個典型的3層結構(UI /域/數據層)的項目。在領域層和數據實體層有兩個領域模型實體有什麼優點和缺點。域模型實體與數據實體,一個或兩個軟件架構
更改爲不同數據庫的可能性很小。數據層中只有數據實體作爲域模型實體有什麼優點和缺點?如果使用ORM有什麼區別(當使用ORM(NHibernate)時,是否有兩個實體都是好的做法)?
請發表您的想法或鏈接,文章,書籍。
更新3
在什麼情況下,我們應該同時使用域實體和數據實體?
域模型應儘可能多地存在以最大化代碼重用和理解。當使用域模型時,例外是在時間,內存或運輸成本方面過於昂貴。
比方說,你有一個零件供應商。該供應商向您提供數千種零件,因此在這種情況下一對多可能會很大,尤其是考慮到每個零件可能帶來的類網。但是,您需要特定供應商提供的特定小部件清單。在這種情況下,您只需使用您需要的數據創建一個值對象。
此值對象可以是供應商對象的副本,僅包含您需要的部分,也可以是僅代表所需數據的全新類。
這個典型的用例可能是在網頁上顯示數據,以及通過json傳輸數據。
對域實體使用數據實體是一件棘手的事情,並且增加了另一個不必要的抽象層而不添加任何值。
您應該使用通過ORM或'anemic'數據模型(也通過ORM映射)映射的全功能域模型。哪一個取決於你的背景,要求和個人喜好。
在數據模型的情況下,您可能直接將表映射到實體(一對一),而沒有任何複雜的東西,如繼承層次結構映射。沒關係。棘手的是映射1:n關係。使用數據模型時,如果不代表對象模型中的「多」一側,它們往往會工作得很好。爲什麼?因爲如果您不添加自定義代碼來處理這些情況,則兩個關係端都很容易不同步。
在域模型的情況下,您可能使用存儲庫來獲取您的聚合根。
我寫的東西有例外。在CQRS架構中使用數據實體和域實體是合法的。
如果您的數據架構沒有完全映射到您的域實體上,則使用數據實體。例如,考慮一個電話號碼。在您的域名實體中,它可能是一個單一的屬性,而在數據庫中它可能由一個區號字段和一個電話號碼字段組成。
與某些答案所暗示的相反,數據訪問層不會保護您的域實體,也不會對它們有深入的瞭解。相反,您的域名層會向您的數據訪問層請求重建實例所需的數據。
從你的解釋,我說的是,在某些情況下,域模型可以存在於所有3層中,而沒有數據實體。德米特里友善的解釋? – Pingpong
是的。絕對。這是一個性能與易於維護的問題。編寫和維護直接與域模型交互的代碼更容易。 –