2016-03-18 12 views
2

Ich habe ein Aggregat mit den Domain-Objekten Order und OrderItem. Order ist die aggregierte Wurzel.Eager-Laden einer Sammlung in DDD

Gegeben eine Order, möchte ich eine spezifische OrderItem (sagen, Nummer 3) bekommen. Das Problem ist, dass ich nicht im Voraus Order.OrderItems bevölkern möchte. Stattdessen möchte ich es bei Bedarf abfragen und genau das bekommen, was ich brauche.

Also muss ich diesen Code in das Order Repository legen, weil ich aus meiner Datenbank lesen muss. Meine Frage ist, ob das in einem DDD-Kontext richtig ist. Wenn ja, könnten Sie mir bitte ein Beispiel für die Signatur geben, die ich verwenden sollte? Ich schätze wirklich.

+0

Afaik. Sie können diese Abfragen in einen Domain-Service oder in das Repository einfügen. Eine andere Lösung von cqrs ist eine separate Lese-Domäne mit diesen Abfragen. Warum möchte ich keine Order.OrderItems haben? – inf3rno

+0

Danke für die Hilfe. Dies ist nur ein hypothetisches Beispiel. Ich versuche DDD zu verstehen. Ich bin mir nicht sicher, ob ich dieses Szenario jemals im wirklichen Leben erleben werde. Vielen Dank! – user11081980

+0

Warum haben Sie eine Liste von OrderItem in Order? Welche Regeln haben Sie für alle Bestellartikel innerhalb eines Auftrags? – plalx

Antwort

2

Sie sollten Ihre Domain nicht abfragen.

Ein Gesamtstamm wird immer von einem vollständig eingerichteten Repository zurückgegeben.

Was Sie implementieren könnten, ist ein bestimmtes Abfrage/Lese-Modell. In der C# Welt in der Regel kehre ich einfach ein DataRow oder, wenn nötig, ein DTO:

public interface IOrderQuery 
{ 
    DataRow ItemDetails(Guid orderId, Guid productId); 
} 

Die obige Signatur ändert sich auf Ihrem speziellen Fall abhängig.

Da es sich um eine hypothetische Situation ist denke ich die Verdienste, warum Sie tun, was Sie tun sollten keine Rolle, zu viel;)

+0

"Ein Gesamtstamm wird immer von einem vollständig eingerichteten Repository zurückgegeben." > Das hat es wirklich deutlich gemacht, danke! – user11081980