Gibt es eine Diskrepanz zwischen Domain-Driven Design-Repositories und Spring Data-Repositories?

8

DDD gibt Repository pro Aggregat an, aber wenn wir Spring Data JPA berücksichtigen, können wir die Vorteile nur nutzen, wenn wir die Schnittstelle pro Entität deklarieren. Wie kann diese Impedanzabweichung aufgelöst werden?

Ich hoffe, Repository-Schnittstellen innerhalb des aggregierten Repository gekapselt zu testen, ist das eine OK-Lösung oder etwas besser verfügbares?

Um ein Beispiel zu nennen: Customer ist der aggregierte Root und die Entitäten sind wie Demographics , Identification , AssetSummary usw., wobei jede Entity von ihren eigenen Repository-Schnittstellen profitieren kann. Was ist der beste Weg ohne DDD viel zu verletzen?

    
Somasundaram Sekar 23.07.2016, 06:11
quelle

1 Antwort

13
  

..., aber wenn wir uns mit Spring Data JPA befassen, können wir die Vorteile nur nutzen, wenn wir die Schnittstelle pro Einheit deklarieren ...

Das ist falsch und ich würde gerne erfahren, woher Sie diesen Eindruck haben (kommentieren Sie ruhig). Spring Data-Repositorys erwarten genau den gleichen Ansatz für Ihr Domänenmodelldesign: Sie identifizieren Aggregate in Ihrem Domänenmodell und erstellen nur Repository-Schnittstellen für genau diese.

Ich würde argumentieren, dass Sie das DDD-Konzept nur auf Ihr Domänenmodell anwenden müssen. Deklarieren Sie Repository-Schnittstellen einfach nicht für Entitäten, die kein Aggregatstamm sind. In der Tat, wenn Sie diese deklariert haben, brechen Sie im Grunde das Konzept eines Aggregats, da das eigentliche root Business-Constraints nicht mehr kontrollieren kann, da die anderen Entitäten über die für sie definierte Repository-Schnittstelle manipuliert werden können, dh ohne den aggregierten Root zu verwenden. p>

Finden Sie ein Beispiel dafür, das in diesem Spring Data Beispiel . Darin ist Order ein aggregierter Root, LineItem ist nur eine gewöhnliche Entität. Gleiches gilt für Customer (root) und Address (gewöhnliche Entität). Repository-Schnittstellen existieren nur für die aggregierten Roots.

Tatsächlich ist diese spezielle Beziehung das fundamentale Prinzip, das Module wie Spring Data REST in erster Linie zum Funktionieren bringt. Es stellt nur HTTP-Ressourcen für Aggregat-Roots zur Verfügung, bettet normale Entitäten in die erstellten Repräsentationen ein und erstellt Links zu anderen Aggregaten.

    
Oliver Gierke 23.07.2016, 13:45
quelle