2009-04-03 4 views
1

Oder definieren Sie ein neues Objekt, das unter anderem das Objekt Root-Objekt enthält?Erstellen Sie das Aggregatobjekt beim Instanziieren einer Root-Entität?

public class SomeAggregateName() 
{ 
    public EntityRoot root {get;set;} 
    public Entity entity {get;set;} 
} 

ODER Ist dies das Aggregat?

public class EntityRoot() 
{ 
    public Entity entity {get;set;} 
} 
+0

Alles, was Sie von unten mit der Antwort nicht sicher sind, ? Ich bin froh, wenn nötig zu klären. –

Antwort

3

Das Aggregat in der Regel impliziert ist - das heißt, es ist das Entity.

Ihr Beispiel macht es ein bisschen schwieriger zu folgen, weil Sie nicht wirklich eine Domain haben.

Aber nehmen wir ein klassisches Beispiel für eine Order-Aggregat-Wurzel, die OrderLines enthält. Die Ordnung ist eine Entität - sie ist auch die Aggregatwurzel. Die OrderLine ist im Order-Aggregat enthalten und kann daher nicht direkt außerhalb des Order-Aggregats aufgerufen werden.

// This is the Order Aggregate Root 
public class Order 
{ 
    private IList<OrderLine> OrderLines { get; set; } 
} 
0

Eine verwandte Frage:

wenn ich will zum Beispiel FluentNHiberanate, verwenden, um meine Domain Einheiten zu initialisieren, dass so aussieht meine Order-Klasse erfordert:

public class Order 
{ 
    public virtual IList<OrderLine> OrderLines { get; set; } 
} 

dies den verletzt Verkapselung der internen Entitäten des Aggregats. Irgendwelche Ideen, wie man es macht, ohne die Verkapselung zu brechen?


OK fand es (eines der verfügbaren Lösungen), Änderung Orderlines Mitglied an private und diese Datei in das Mapping hinzu:

HasMany(Reveal.Property<Order, IEnumerable<OrderLine>>("OrderLines")) 
.Inverse() 
.Cascade 
.All(); 
Verwandte Themen