我一直試圖瞭解DDD幾個星期了。它非常混亂。我不明白我如何組織我的項目。我有很多關於UnitOfWork,Repository,Associations的問題,並且這個列表繼續...瞭解領域驅動設計
讓我們舉一個簡單的例子。
Album and Tracks
Album: AlbumId, Name, ListOf Tracks
Tracks: TrackId, Name
我應該暴露曲目作爲專輯一的IList/IEnumerabe財產?如果那我該如何添加一張專輯?或者我應該公開一個ReadOnlyCollection的軌道並公開一個AddTrack方法?
如何加載專輯曲目[假設延遲加載]?應該吸氣劑檢查爲空,然後使用存儲庫加載軌道,如果需要的話?
我們如何組織組件。像每個組件有什麼? Model.dll - 它只有域實體嗎?存儲庫在哪裏?接口和實現兩者。我可以在Model.dll中定義IAlbumRepository嗎? Infrastructure.dll:這有什麼用?
定義的工作單元在哪裏?知識庫和工作單元如何溝通?或者他們應該?例如。如果我需要將多首曲目添加到專輯中,應該再次將其定義爲專輯的AddTrack或應該在存儲庫中有一個方法? 無論方法在哪裏,我如何在這裏實現工作單元?
UI應該使用Infrastructure.dll還是應該有ServiceLayer?
我的問題有道理嗎?
問候
重要的是要記住,DDD主要是關於無處不在的語言,一種使用客戶和程序員都可以理解的術語與客戶進行交流的方式。該計劃的設計是次要的,但重要的考慮因素。拿起Eric Evans關於DDD的書可能是值得的。 – 2010-06-11 05:14:34
只是想提及,它是我的寵物使用程序集來組織代碼,這是命名空間的用途。程序集適用於需要在多個項目之間共享代碼的情況,但不一定要將所有內容都納入其中。通過將archetecture圖層拆分爲單獨的dll,您所做的全部工作都是編譯時間更長,應用程序加載時間更長。 – 2010-06-11 05:14:42
InfoQ提供了一本關於DDD的入門書,它是Eric Evans書中的一部分:http://www.infoq.com/minibooks/domain-driven-design-quickly – APC 2010-06-11 05:52:47