Domain Services 

Ist Domänenlogik in einem Usecase Controller vorhanden, so können Domain Services zur Extraktion verwendet werden. Domain Services in Schleupen.CS 3.0 kapseln Domänenlogik, die rein auf den Aggregaten, Entitys, Value Objects und Daten externer Services basieren. Sie werden als eigene Klasse implementiert in einem Usecase Controller angebunden und verwenden selber das Domain Model. In Schleupen.CS werden diese dem Domain-Layer zugeschlagen.

Namenskonvention: <TueEtwas>DomainService

Wann benötigt man einen Domain Service?

Hier gibt es zwei Hauptanwendungsfälle:

Immer wenn komplexe fachliche Logik implementiert werden muss, die sich auf mehrere Aggregates bezieht kann die Implementierung von Domain Services in Erwägung gezogen werden.

Bewertung: Alternativ ist es in der Regel möglich, diese Logik in einem Aggregate unter Verwendung eines anderen Aggregates zu implementieren, d.h. das erste Aggregate wird in die Methode des anderen Aggregates gegeben. Für diesen Fall ist ein Domain Service also nur eine alternative Implementierung. Die Bewertung ist ein Trade off: Verwendet man Domain Services, besteht die Gefahr, die Kapselung der Aggregates aufzubrechen, dafür aber die Kopplung der Aggregates zu minimieren. In den meisten Fällen haben wir uns gegen Domain Services entschieden.

Der zweite Anwendungsfall ist der, bei dem man per Service externe Daten und damit verbunden fachliche Logik für die Berechnung benötigt. Diese haben im Usecase Controller nichts verloren und aus Aggregates heraus dürfen Services nicht aufgerufen werden. Somit bieten Domain Services hierzu eine elegante Lösung.

Auch hier gibt es eine alternative Lösungsmöglichkeit: Das Caching der Daten des externen Services und damit verbunden die Logik in Aggregates zu implementieren. Dies ist aber nicht immer sinnvoll möglich!

Details hierzu können in Domain services vs Application services nachgelesen werden.

Cookie Consent mit Real Cookie Banner