Ich habe ein Aggregat, das die Entitäten A
, AbstractElement
, X
, Y
und Z
enthält. Die Root-Entität ist A
, die auch eine Liste von AbstractElement
enthält. Die Entitäten X
, Y
und Z
erben von AbstractElement
. Ich brauche die Möglichkeit Instanzen von X
, Y
und Z
zu einer Instanz von A
hinzuzufügen. Ein Ansatz besteht darin, ein Verfahren für jeden Typ zu verwenden, d. H. addX
, addY
und addZ
. Diese Methoden würden als Argumente die Werte annehmen, die erforderlich sind, um Instanzen von X
, Y
und Z
zu erstellen. Aber jedes Mal, wenn ich einen neuen Typ hinzufüge, der von AbstractElement
erbt, muss ich die Entität A
ändern, also denke ich, dass es nicht die beste Lösung ist.Aggregieren Stamm und Instanzen erstellen von untergeordneten Entitäten
Ein anderer Ansatz besteht darin, eine abstrakte Add-Methode addAbstractElement
für das Hinzufügen von AbstractElement
Instanzen zu verwenden. Aber in diesem Fall würde das Verfahren als Argument eine Instanz von AbstractElement
nehmen. Da diese Methode von Entitäten aufgerufen wird, die sich außerhalb des Aggregats nach den DDD-Regeln/-Empfehlungen befinden, sind diese externen Entitäten berechtigt, Instanzen von AbstractElement
zu erstellen? Ich habe im Buch von Eric Evans gelesen, dass externe Entitäten nicht berechtigt sind, Referenzen auf Entitäten eines Aggregats außer der Wurzel zu halten.
Was ist die beste Vorgehensweise für diese Art von Problem?
Dank
In meinem Fall unterscheiden sich die Details von einer Entität zur anderen. Um eine Instanz von X zu erstellen, brauche ich eine Zeichenfolge. Um eine Instanz von Y zu erstellen, brauche ich zwei Strings ... Wie funktioniert es in diesem Fall? Wie kann ich nur eine Methode verwenden? –
Sie sind nicht auf DDD beschränkt, um nur eine Methode zu erstellen - Sie können 3 verschiedene Methoden erstellen, solange sie als FABRIKMETHODEN fungieren. – ItzikSaban
Aber in diesem Fall existiert das Problem, das ich in meiner Frage aufgeworfen habe, immer noch. Ich müsste jedes Mal, wenn ein neuer Typ hinzugefügt wird, eine neue Factory-Methode hinzufügen. –