Implementierung des domänengesteuerten Design-Repositorys in der Infrastrukturschicht

8

Ich habe eine Frage zu den Abhängigkeiten der DDD-Schichtarchitektur. Wenn sich die Repository-Implementierung in der Infrastrukturschicht befindet, bedeutet dies, dass die Infrastrukturschicht eine Abhängigkeit vom Domänen-Layer hat, da Entitäten in der Repository-Implementierung referenziert werden.

Auf der anderen Seite kann der Domänen-Layer Verweise auf den Infrastruktur-Layer haben, wenn Infrastruktur-Services in der Domäne verwendet werden.

Würde dies nicht eine zyklische Referenz erzeugen?

    
APL 15.09.2013, 05:36
quelle

2 Antworten

11

Sehen Sie sich die Zwiebel-Architektur an, die ein gutes Setup für eine DDD-Lösung zeigt.

Grundsätzlich werden alle Domänenmodelle und Schnittstellen für Domänendienste als Kern betrachtet. Schichten hängen nur von Schichten über ihnen ab, die näher am Kern liegen. Ihre tatsächliche Implementierung wird von der Infrastruktur übernommen.

Domain-Projekt sollte nicht auf ein Infrastrukturprojekt verweisen. Wenn die Domäne etwas verwenden soll, sollte sie als Schnittstelle innerhalb der Domäne definiert und im Infrastrukturprojekt implementiert werden.

Letztendlich sind Ihre Schnittstellen das, was Ihre Anwendung ausmacht. Die Logik, wie dies umgesetzt wird, ist externalisiert. Ich würde also erwarten, dass Sie Assemblys mit Domänenmodellen und Domänenservices, einem Frontend (z. B. MVC usw.) und einer Infrastrukturassembly, die Dinge wie NHibernate implementiert, um Daten usw. bereitzustellen.

Sie können verschiedene Beispiele sehen, die die Architektur in den verschiedenen Teilen des verknüpften Artikels implementieren. Die einfachste ist hier

Sie können Fragen dazu hier

sehen

Der Hauptvorteil besteht darin, dass sich in erster Linie die infrastrukturellen Belange am häufigsten ändern werden. Neue Datenschichttechnologien, neuer Dateispeicher usw. Auch Ihre Kerndomäne sollte einigermaßen stabil sein, da sie nichts implementiert, was nur durch den Vertrag (Schnittstellen) definiert wird, was sie benötigt. Indem Sie die Implementierungsfragen an einem Ort platzieren, minimieren Sie die Menge an Änderungen, die in Ihren Assemblies erforderlich sind.

    
GraemeMiller 15.09.2013, 12:29
quelle
0

Ja, in Ihrem Fall. Und ich habe die gleiche Frage:)

Hier ist meine Erklärung:

Es scheint, dass die Infrastructure-Schicht eine besondere im Architekturdiagramm von Eric Evans ist. Es implementiert Schnittstellen, Anwendung, Domäne.

Dieser ist irgendwie weit hergeholt .....

Aber auf der anderen Seite könnten Sie die Infrastruktur in separate Adaptermodule aufteilen, da die Infrastrukturkomponenten normalerweise aus Adaptern, Übersetzern und Fassaden bestehen.

Zum Beispiel

1) Die Domain kann vom Mailing abhängig sein, wenn Sie einem DomainService einen MailManager hinzufügen. 2) Persistence haben eine Abhängigkeit von Domain (Repository Fall).

Aber wenn Sie Mailing und Persistenz in zwei Module trennen, sind sie nicht voneinander abhängig. Ich denke, das könnte das Problem lindern.

Schließlich ist das Layering eine Methode, um Komponenten zu entkoppeln, die keinen Zweck haben.

Last but not least, erwarte ich mehr überzeugende Antworten:)

    
Hippoom 15.09.2013 06:13
quelle