0

我已經完成了DDD幾年,現在仍然充滿挑戰,當涉及到設計聚合。這就是DDD的有趣部分,它讓你頭腦轉動。我在問這個問題,因爲我是一個項目的架構師,我們正在設計模型。它是模型與GUI並行發展並與客戶一起收集需求時的迭代。 現在到了這個問題。我們的情況是,我們正面臨一些正在成長爲非常大的AR的聚合體。我認爲我擅長找到價值對象並避免貧血域模型陷阱。但我從來沒有遇到過這種情況。 一個例子是我們的系統應該代表移動電信天線。天線位於綠色的田野上。但天線可以有設備的避難所。天線可以有微波鏈路,它可以有地面光纖線路,它可以有無線電元件,它可以有電源。面對它。如果天線終止......所有這些依賴關係也被刪除。由於他們是安裝的一部分(除了綠色的領域:)) 但你得到的照片。天線模型非常複雜......大型AR對於併發鎖,性能和內存消耗不夠靈活。引用另一個聚集根中的另一個聚合根?

在閱讀Vaughn Vernons關於Effective AR設計的非常好的論文http://dddcommunity.org/library/vernon_2011/我意識到我們需要開始切碎我們的大AR。

我的想法是像弗農建議將微波鏈接移動到單獨的AR(即使它不在現實中)。 MicrowaveLink實體現在是AR,它是Id的參考天線。在MicrowaveLink實體類中,我們有一個值爲AntennaId的值對象屬性。 我們的用例支持這種情況。我們很少列出天線和鏈路。因此可以通過MicrowaveLinkRepository.ListByAntenna(Guid antennaId)加載微波鏈路。(1)您之前是否已經完成了此AR分割,您是如何做到的? 2)您是否設法通過域約束和數據庫(我們使用EF 5作爲ORM)支持這種AR - > AR關係完好?

我的最佳目標是能夠跳過天線上的Antenna.Microwaves集合。所以天線不知道鏈接。該鏈接意識到它們安裝的天線。 而在MicrowaveLink實體中,我只想要一個AntennaId屬性,並希望有一個DB Constraints確保天線存在。

我知道我可以通過T-SQL腳本直接在EF或DB中的Seed方法中手動添加FK約束。但是EF5 Code First Fluent映射能夠以某種方式支持這種關係嗎?

回答

1

通過它的聲音,你有一個Installation AR。當需要在另一個AR時,你應該將包含的AR模型化爲容器中的唯一ID或需要的VO。

你需要在你的AR周圍有一些硬邊緣。

回到Order/OrderLine例如:)

一個OrderLine似乎「需要」一個產品,但你不應該永遠放棄一個產品實例TOT誒OrderLine。取而代之的僅僅是ProductNameProductId的模型,作爲OrderLine中的VO。現在你對你的Order AR具有明顯的優勢。

希望有所幫助。

+0

那就是我現在的模型。在我的模型中,安裝是「Site」,我通過Microwave端的VO對象將Microwave Links與Site分開。因此,MicrowaveLink.LinkedSite屬性是一個包含SiteId和SiteName的VO。只是好奇,如果你有這樣做的「活」的經驗,它有多好的投票率?據我所知EF不支持這種關係,你只能表達這種一對多的關係,沒有導航屬性......只是單方面的VO。 –

+0

恐怕我沒有EF經驗。我不特別喜歡ORM :) ---但對於應用DDD技術的成功,我無法抱怨。 –

相關問題