2013-01-21 31 views
0

當應用程序想根據已經存在的集合創建新的集合時,我們被允許將現有集合中的所有內容(內部實體的ID除外)複製到新的集合中。但是如果某個內部對象引用了聚集邊界外的對象,我們不允許複製引用的對象。複製聚合:爲什麼我們不應該複製聚合邊界外存在的對象?

a)我知道聚合應該介意他們自己的業務,不要干擾其他聚合的生命週期,但如果我們也複製了存在於聚合邊界之外的對象,究竟會出錯?

+2

你會提供一個更具體的例子嗎? – eulerfx

+0

@eulerfx:這不是一個通用規則,不管我們有什麼樣的領域模型(至少我是這麼理解DDD的作者的:解決複雜性 - 他從來沒有明確地說過,但我認爲他暗示了它)? – user437291

+1

我要求舉例的原因是從您的域蒐集可能影響答案的內容。彙總的複製並不是DDD明確涵蓋的內容,因此可能會對您的情況提出警告。 – eulerfx

回答

2

假設您有一個合計OrderOrderLine對象的集合,並且您希望基於現有訂單創建新訂單,則只會複製訂單及其相關訂單項次。即使訂單行可能提及Product,也不會複製產品,因爲它不是彙總的一部分。

訂單行理想情況下應該甚至沒有對產品實例的引用,而只是保留產品ID。

由於eulerfx已經提到複製背後的原因可能會給一個更多的見解:)

+0

「訂單行理想情況下甚至不應該引用產品實例,而只是保留產品ID。」我知道Aggregates應該確保沒有一致性規則在它自己的集合中受到侵犯,但是如何引用一個Product可能會違反集合的任何一致性規則? – user437291

+1

引用產品並不會破壞一致性規則,而是創建一個非常明確的邊界的AR。事實上,爲了保持一致性,需要在訂單行*上提供某種產品/服務。 –

+0

「事實上,爲了保持一致,需要在訂單行上提供某種產品/服務。」你能否詳細說明爲什麼要求訂單產品的一致性? – user437291