1

關於使用EntityFramework的DomainModel的持久性。我想驗證下面的方法在該領域的專家:首先使用實體​​框架模型的域驅動設計

槓桿OnModelCreating映射或忽略一些並不需要的導航性能 。不幸的是,所有這些都是針對 Code-First的。

VS

款待機型第POCO的DTO &使用反腐敗層

我們在數據庫中使用的模型首先,設計的巨大的投資在 爲了利用DDD離開了只有一條路徑我們 - 離開POCO 僅由設計師生成的類別&域類別分開。當需要 進行手動映射或使用AutoMapper時。我對麼?

第二什麼是最好的地方有這個映射,反腐敗層?

編輯: 我們> 250個表中的架構,通過持續代碼第一感覺好像失去了理解能力是設計師供應商,也是第一建模我一旦生成.SQL完整的權威。然而,在代碼中,首先我必須忍受代碼優先的遷移,爲我生成/更新表。

+0

儘管您可以使用Automapper將POCO和域類分隔開來,但我通常不使用POCO。我有我的領域乾淨,沒有任何引用EF,因此沒有OnModelCreating和DataAnnotations在我的域名。 EF內Infra /數據層,引用我的域,並使用我的域類生成數據庫。在我的應用程序層,我有更簡單的模型暴露給應用程序,代表與Automapper映射的域類。請閱讀此[發佈](http://stackoverflow.com/questions/909264/ddd-anti-corruption-layer-how-to),我發現它很有趣。 – Alisson

+0

有「支持狀態對象」的方法,雖然我不是很喜歡它,並且不會推薦它用於綠地應用程序:https://vaughnvernon.co/?p = 879 – guillaume31

回答

1

我認爲數據庫/設計師的第一種方法不適用於DDD。原因是類/模型設計只是您的DDD設計的一部分。另一部分是這些類/模型提供的方法。 AFAIK你會很難用設計師的第一種方法來實現這些。

另外有一個公共的默認構造函數是人們爲了能夠映射他們的模型而進行的普通權衡。

表示有工具可以根據您的數據庫創建POCO對象。所以即使您想切換到POCO方法,您的努力也不會受到束縛。未來的更新可能會在您的POCO的第一次完成。

我認爲你需要問自己,如果你是強加給自己的限制是不是讓您從您希望的解決方案,(使用實體框架,並沒有公共構造函數)

如果你保持你的POCO的獨立從你的模型,然後是反腐敗層是他們將住的地方。在這種情況下,他們只是DTO。