我有一個聚合,包括實體A
,AbstractElement
,X
,Y
和Z
。根實體是A
,它也有一個AbstractElement
的列表。實體X
,Y
和Z
繼承自AbstractElement
。我需要將X
,Y
和Z
的實例添加到A
的實例的可能性。一種方法是對每種類型使用一種方法,即addX
,addY
和addZ
。這些方法將以創建實例X
,Y
和Z
所需的值爲參數。但是,每當我添加一個繼承自AbstractElement
的新類型時,我需要修改實體A
,所以我認爲這不是最好的解決方案。創建子實體的聚合根和實例
另一種方法是使用抽象添加方法addAbstractElement
來添加AbstractElement
實例。但是,在這種情況下,該方法將採用AbstractElement
的實例作爲參數。由於這種方法將被位於聚集之外的實體調用,因此遵循DDD規則/建議,這些外部實體是否有權創建AbstractElement
的實例?我在埃裏克埃文斯的書中讀到,外部實體無權持有除根之外的聚合實體的引用?
這種問題的最佳做法是什麼?
感謝
就我而言,細節從一個實體到另一個實體是不同的。要創建X的實例,我需要一個字符串。要創建一個Y的實例,我需要兩個字符串......在這種情況下它是如何工作的?我怎樣才能只使用一種方法? – 2012-03-27 14:28:24
您不受DDD限制只能創建一種方法 - 只要它們充當工廠方法,就可以創建3種不同的方法。 – ItzikSaban 2012-03-27 14:36:15
但是在這種情況下,我在問題中提出的問題依然存在。每次添加新類型時,我都需要添加一個新的工廠方法。 – 2012-03-27 15:48:55