Ich habe DDD in den letzten zwei Wochen studiert, und eines der Dinge, die mir wirklich auffielen, war, wie Aggregatwurzeln andere Aggregatwurzeln enthalten können. Aggregatstammbäume werden aus dem Repository abgerufen. Enthält ein Stamm jedoch einen anderen Stammordner, hat das Repository einen Verweis auf das andere Repository und fordert es auf, den Teilstammsatz zu erstellen?
@ Paco: Sie liegen falsch. Repositories dienen nicht nur zum Speichern von Objekten. Wenn Sie das DDD-Buch von Eric Evan gelesen haben, würden Sie wissen, dass Repositories wie eine objektorientierte In-Memory-Darstellung von Daten sind. Sie können ein Repository-Objekt genauso verwenden wie eine Collection. Sie können Indexer zum Abrufen oder Festlegen von Objekten verwenden, Sie können die Add () - Methode verwenden, um ein neues Objekt hinzuzufügen, Sie können die Remove () -Methode verwenden, um ein Objekt usw. zu entfernen.
Das Repository verwendet dann die Infrastruktur zum Lesen / Schreiben von Daten von / zur Datenbank. Es kann einen DataMapper verwenden, um das Abrufen von Daten aus Ihrer relationalen Datenbank und das Mapping auf Ihre Entitäten zu vereinfachen.
Das Repository erstellt nicht, speichert es aber. Wenn Sie ddd verwenden, sollten Sie sich mit grundlegenden Persistenzmustern wie Arbeitseinheit, Identitätskarte, Lazy Load, Objektbeziehungszuordnung, Abfrageobjekt, (dynamischem) Proxy vertraut machen. (Diese Muster haben nichts mit DDD zu tun, sind aber sehr nützlich zu wissen). Das Repository ist nur eine Fassade, um die Implementierung der zuvor erwähnten Muster zu verbergen und den Datenzugriff domänenorientiert zu abstrahieren. Die meisten Leute schreiben ihre Persistenz-Infrastruktur heutzutage nicht manuell manuell, besonders wenn Sie ddd benutzen, können Sie sich ein orm anschauen.
Die tatsächliche Referenz mit dem Code, der die Datenbankeinträge in ein Objekt konvertiert, befindet sich im Datamapper. Es gibt Verweise zwischen Mappingklassen in den Mappingklassen selbst oder durch eine Art Mapperfactory.
%Vor%Sie müssen diesen Code nicht selbst implementieren, verwenden Sie einfach ein Tool, das es für Sie tut, und versuchen Sie zu verstehen, wie Teile des Codes im Tool (orm) funktionieren. Pure DDD ohne Orm ist fast unmöglich ohne eine gute Reihe von Tools, die Sie vor dem Schreiben einer Menge Code speichern.
Meiner Meinung nach kommt es darauf an - ich habe das gleiche Szenario und die Art und Weise, wie ich damit umgehe, geschieht über das ORM, das ich verwende - nHibernate.
Ich habe Mappings für alle meine Entitäten, von denen einige Aggregatwurzeln sind und eine davon mehrere andere Aggregatwurzeln als Membervariablen hat. Das Repository für dieses zusammengesetzte Aggregatstammverzeichnis erfordert keine Verweise auf andere aggregierte Stammrepositorys, da nHibernate weiß, wie alle erforderlichen Daten abgerufen werden (über die Zuordnungen).
HTH
AWC
Tags und Links repository-pattern domain-driven-design aggregateroot