Ihr Ansatz funktioniert, aber solche Kompositionen erzählen Geschichte über Ihren Code, der sich auf DDD-Bausteine konzentriert, und nicht über immanente Funktionen Ihrer Domain. In DDD wollen wir wichtige Dinge über Domain zeigen, die Technologieprobleme sind nicht mehr die wichtigsten Anliegen.
Ich schlage vor, Erstellung folgende Namespaces:
YourCompany.YourApplicationName.YourParticularBoundedContextName.Application
hier Sie alle Anwendungsbereiche Bausteine d Application Services und DTO halten können, die verwendet werden Parameter Application Services zu übertragen und das Rück Daten von ihnen.
YourCompany.YourApplicationName.YourParticularBoundedContextName.Domain
Dies ist der Namespace, in dem Sie Unternamespaces für Domain Scope-Bausteine erstellen.
YourCompany.YourApplicationName.YourParticularBoundedContextName.Domain.AggregateName
jedes Aggregat haben einen eigenen Namensraum, in dem Aggregate Root-Klasse gibt es, Organisationen und VOs intern verwendete in diesen Aggregaten, Repository-Schnittstelle, Aggregate Fabrik bei Bedarf usw. ich weiß nicht, ob in C# ist möglich, aber in Java gibt es einen weiteren Vorteil des separaten Pakets (Namespace) für Aggregat - Sie können die Aggregat-Root-Klasse und alle anderen Entitäten und VOs, die intern als Paketbereich verwendet werden, nicht außerhalb des Pakets (Namespace) sichtbar machen). Auf diese Weise bauen Sie öffentliche API für Ihre Aggregate, dass niemand brechen kann, weil es ein Wächter ist: die Compiler :)
YourCompany.YourApplicationName.YourParticularBoundedContextName.Infrastructure
hier ist ein Ort für Endlager Implementierungen (jeweils in subnamespace entsprechenden Aggregaten)
YourCompany.YourApplicationName.Domain
und auch gehalten in separatem Projekt, wie Sie es in einer anderen Anwendung wiederverwenden können versuchen:
Basisklassen können in gehalten werden.
Was ist der Vorteil? Bei der Arbeit mit Code konzentrieren Sie sich eher auf Features und Domänen als auf technologische Aspekte. Sie werden häufiger mit Problemen wie "Wie sieht dieser Prozessfluss aus?" Umgehen als "Ich möchte alle meine Entitäten und VOs gleichzeitig sehen". Lassen Sie Ihre Code-Struktur dies unterstützen.Trennen von Entitäten (Aggregate Teile tatsächlich) und VOs (auch Aggregate Teile) in separate Namespaces Sie verloren Informationen, was mit was funktioniert. Sie können einfach mit einem großen Schlammball enden, weil Sie etwas wiederverwenden, das nicht wiederverwendet werden sollte.
Bitte schauen Sie sich an: https://github.com/BottegaIT/ddd-leaven-v2 es ist ein Beispielprojekt in Java mit Verpackung auf diese Weise. Vielleicht wird es dir helfen.
Ein anderes Beispiel ist: https://github.com/VaughnVernon/IDDD_Samples das ist ein Beispiel für Vaughn Vernon Buch über DDD.
Es gibt auch Artikel, die nützlich sein können: http://www.codingthearchitecture.com/2015/03/08/package_by_component_and_architecturally_aligned_testing.html
ich über die Domänenschicht spreche. Der Domänenebene ist die Datenbank nicht einmal bekannt. Deshalb verstehe ich nicht, was du meinst. – w0051977