Mein Verständnis der Anwendungsdienste besteht darin, dass sie die Domäne und die Benutzerschnittstelle miteinander verknüpfen. Mit anderen Worten dienen sie dem Controller zum Ausführen von Operationen in der Domäne.DDD-Anwendungsdienstdomänenmodell zum Anzeigen von Modellzuordnungen
Ich habe folgendes Projekt-Layout in meiner Anwendung:
- Domain-Core
- Infrastruktur
- Service Interfaces
- Web UI
- Viewmodels
- Ansichten
- Controller
- Services (Application Services)
Mein Service Interfaces
liegt außerhalb des Web UI
Projekt. Dann implementiere ich im Web UI
Projekt die Dienste-Schnittstellen unter Services
.
Allerdings ist diese Struktur ein wenig fehlerhaft und schafft eine zirkuläre Abhängigkeit, wenn wir dies in die Praxis umsetzen. Ich habe versucht, der Architektur in diesem Link zu folgen. https://www.develop.com/onionarchitecture
Für einen bestimmten Dienst möchte ich das Ansichtsmodell übergeben, Operationen auf der Domäne basierend auf dem Ansichtsmodell ausführen und dann ein aktualisiertes Ansichtsmodell zurückgeben. Ist dieser Ansatz falsch?
Ist mein Verständnis korrekt, dass der Anwendungsdienst im Wesentlichen das Ansichtsmodell als Parameter verwendet, einige Details in der Domäne aktualisiert und das Modell anzeigt, wenn es benötigt wird, und dann ein Ansichtsmodell zurückgibt?
Oder
Hat der Anwendungsdienst nur mit C# und Datentypen Domänenmodelle als Parameter und liefert die gleichen Datentypen umgehen? Mit anderen Worten: Es werden keine Informationen in einem Ansichtsmodell abgerufen oder festgelegt. Tatsächlich kennt das View-Modell nicht.
Ich brauche nur eine Klarstellung darüber, was der beste Ansatz von einem strikten DDD-Ansatz ist.
Anwendungsdienste befinden sich normalerweise nicht in der Darstellungsschicht (UI), zu diesem Zweck gibt es eine Anwendungsschicht. – plalx
Erstelle ich ein anderes Projekt für diese Service-Implementierung oder stelle sie unter Services, wo meine Schnittstellen liegen? –
Sie können alle Dinge in einem Projekt zusammenhalten, solange Sie für jede Komponente/jeden Layer ein Verzeichnis reservieren. – MikeSW