Ich habe eine Entität namens Master, die sich aus einer Reihe von Slave-Entitäten zusammensetzt.
Es kann nur einen Master in meiner Datenbank geben, und ich möchte Repositorys abfragen, um den Slave für eine bestimmte ID abzurufen.
Ich habe zunächst ein SlaveRepository erstellt und dieses nach id abgefragt. Das scheint in Ordnung zu sein und funktioniert und andere Entwickler könnten mein Repository verwenden.
Dann dachte ich über aggregierte Wurzeln nach und erstellte ein MasterRepository und gab den Master zurück und machte dann eine Schleife, um die erforderliche Slave-Entität zu erhalten. Das Problem, das ich hier hatte, ist, dass ich, sobald ich dies anderen Entwicklern zur Verfügung stelle, dasselbe tun müsste. Ich habe also eine Methode im MasterRepository namens GetSlaveByID (Zeichenfolgen-ID) und dann könnte ich den Slave direkt abrufen (verbirgt die Schleifenfunktionalität) ).
Sollte mein Repository nun einen Slave zurückgeben, obwohl er als MasterRepository bezeichnet wird? Und was noch wichtiger ist, welcher ist der richtige Weg?
Ich bin in den frühen Stadien des Versuchs, DDD und TDD anzuwenden, daher gibt es wahrscheinlich viele Dinge, über die ich nachdenken muss, bevor ich mich für die richtige Art und Weise entscheide.
Im Allgemeinen sollte es innerhalb der Aggregatgrenze nur ein Repository geben. Und - wie Falcon sagte - Sie könnten zwei separate Aggregate haben, Master und Slave.
Es sieht jedoch so aus, als ob der Hauptfokus in Ihrer Frage auf dem Abrufen von Daten liegt, während es in DDD das Verhalten sein sollte. Aggregatgrenzen sind eine Folge von Verhaltensbeschränkungen (Dinge, die sich gemeinsam ändern und zu erzwingende Invarianten ). Die interne Struktur des Aggregats ist eine Folge dieser Wahl.
Wenn Sie beispielsweise die Dinge entsprechend den Änderungsbedürfnissen richtig gruppieren, müssen Sie nicht unbedingt ein externes Repository aufrufen. In den meisten Fällen sollten sich die erforderlichen Daten für einen Geschäftsvorgang im Aggregat bereits innerhalb der Aggregatgrenzen befinden. Die Notwendigkeit, auf verschiedene Aggregate zuzugreifen, riecht wahrscheinlich nach einer inkonsistenten Grenze.
quelle