Frage

Ist es allgemein akzeptabel, dass ein Repository auf ein anderes Repository zugreifen kann? In diesem Fall habe ich eine Aggregat -Wurzel, die eine andere Aggregat -Wurzel verwendet, um zu bestimmen, welche Entitäten hinzugefügt werden sollen. Es fällt in den Zeilen einer Art von Element-/Gegenstandstyp -Beziehung. Der Grund, warum der Elementtyp eine Aggregat -Wurzel ist, ist, dass sie innerhalb eines Management -Tools außerhalb des Rahmens eines einzelnen Elements separat gewartet werden können.

Wenn es wichtig ist, erstelle ich meine Repository -Instanzen nur über eine Repository -Fabrik -Implementierung, sodass ich sie nicht direkt mit dem konkreten Klassennamen erstelle. Zu keinem Zeitpunkt ist das Aggregat des Repositorys bewusst.

Bearbeiten - Weitere Informationen:

Die spezifische Implementierung ist, dass wir Bilder an ein Dokument anhängen können. Wir können nicht nur die Bilder im Dokument verwalten, sondern es gibt auch verschiedene Arten von Bildern (Typen werden als beispielsweise so definiert, wie es implementiert wird, im Gegensatz zu einer Erweiterung). Das Dokumentaggregat ist eines der wenigen Arten anderer Objekte im System, die diese Bilder verwenden, und sie verwenden nicht alle dieselben Typen. Während wir Regeln in den Domain -Diensten anschließen, ist dies spezifischer darauf ausgerichtet, das Dokumentaggregat zu erstellen. Beim Aufbau des Aggregats haben wir fünf Bilder eines bestimmten Typs und jeweils zwei andere Typen. Wir ziehen diese individuell, weil sie im Gesamtlisten in separaten Listen gespeichert werden. Die Validierung ist nicht das Problem, sondern begrenzt, welche Art von Bildern bei der Zusammenstellung des Dokuments bewertet wird.

War es hilfreich?

Lösung

Ich denke, es läuft auf das hinaus, was Sie versuchen zu tun. Wenn es sich um eine Art Validierungsschritt handelt (z. B. alle Elemente entfernen, die abgelaufen sind), könnten Sie argumentieren, dass sie in eine Serviceschicht oder Spezifikation gehört. Aus der Sprache, die Sie verwenden (dh "bestimmen Sie, welche Entitäten hinzugefügt werden sollen"), scheint es letzteres zu deuten, obwohl es schwierig ist, ohne weitere Details zu sagen.

Ich denke, aus einer gewissen Sicht gibt es keinen wirklichen Grund, warum Sie nicht können (ich bin keineswegs ein Super DDD Purest), zumal ein Element und sein Typ als Gesamtwurzel angesehen werden können und es ist nur das Implementierungsdetail Sie müssen eine Managementkonsole bereitstellen, die verhindern wird.

Aus einer anderen Sicht scheint es zu deuten, dass zwischen Ihren Gesamtwurzeln eine Unschärfe besteht, die darauf hindeuten, dass zwei verschiedene Kontexte am Werk sind. Beispielsweise könnte man argumentieren, dass ein Management -Tool einen separaten begrenzten Kontext für Ihre Hauptanwendung bildet und der Fall für den Elementtyp, der ein Aggregat -Root ist, nicht wirklich gilt. ZB dem Management -Tool befasst sich möglicherweise nur mit Artikeltypen (und niemals Elementen), während Ihre Hauptanwendung möglicherweise Elementtypen als Mehrwertobjekt als als Entität anzeigt.

Aktualisieren

Wenn Sie erwähnen, dass das Dokument zusammengestellt wird, scheint dies die Verantwortung einer Fabrikklasse zu sein, die eine gültige Entität korrekt zusammenstellen kann (die Fabrik kann das Bildtyp -Repository verwenden). Ein Repository sollte (in meinen Augen) Abfragen und Hinzufügen von Operationen entlarven, nicht die Logik, um Entitäten zu konfigurieren (außer möglicherweise rehydrieren sie aus Persistenz).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top