2016-07-27 28 views
0

Ich habe Probleme festzustellen, wenn ein Dienst, den ich erstelle, eine Domäne oder eine Anwendung ist. Aus dem Buch, das ich "Domain Driven Design in PHP" gelesen habe, heißt es, dass ein Application Service wie eine "User SignUp Request" sein würde, auf ein Repository zugreifen und überprüfen würde, ob ein Benutzer existiert oder nicht. Sie nehmen jedoch das gleiche Beispiel, um es als einen Domain-Service zu implementieren, so dass ich nicht beide unterscheiden kann.ddd - ist mein Dienst eine Domäne oder eine Anwendung?

Meine Situation ist die folgende: Ich erstelle eine dynamische Seitenerstellung. Eine Seite so viele Blöcke, die alle eine Unterklasse eines Basisblocks sind. Jede Unterklasse des Basisblocks verfügt über eigene Geschäftsregeln, mit denen der Benutzer sein Design anpassen kann (im Grunde sollte es ein Formular zurückgeben, das für jeden Block anders ist).

Ich beginne mit dem Anwendungsfall "Ein Benutzer möchte einen [bestimmten Block] zu einer Seite hinzufügen".

Ich frage mich, ob dies ein Domain Service oder ein Application Service ist. Jede Hilfe wird sehr geschätzt.

+1

Was meinen Sie genau mit * „nehmen das gleiche Beispiel es als Domain-Service zu implementieren“ *? Ich bin mir nicht sicher, wie ein DDD-Buch, das sich selbst respektiert, diesen fundamentalen Unterschied nicht erklären könnte. Sind Sie sicher, dass Sie richtig gelesen haben? Ein guter Artikel über Dienstleistungen in DDD: http://gorodinski.com/blog/2012/04/14/services-in-domain-driven-design-ddd/ – guillaume31

+0

Das Buch nimmt genau das gleiche Beispiel: "Ein Benutzer möchte Melden Sie sich an und implementieren Sie es zunächst als Anwendungsdienst und dann als Domänenservice. Aber es scheint, als hätte ich es falsch verstanden. Ihr Artikel war eine große Hilfe, danke! – Lucio

+0

Vielleicht hat der Anwendungsdienst den Domain-Service im Buch aufgerufen? – guillaume31

Antwort

3

Ihre Anwendungsdienste sind in der Regel für die Orchestrierung eines Anwendungsfalls verantwortlich und führen so etwas wie das Laden/Speichern eines Aggregats aus Persistenz durch.

also so etwas wie:

public void SomeUseCase() 
{ 
    var aggregate = _repository.Load(someId); 
    aggregate.ApplySomeBehaviour(someDomainService); 
    _repository.Save(aggregate); 
} 

während eine Domain-Dienst würde mehr Domain-Verhalten spezifisch sein, zum Beispiel ein RateCalculator - ein Objekt, das nicht in das Gesamtkonzept passt aber enthält Verhalten müssen Sie erfassen Deine Domain.

Mögliche Duplikat Domain Driven Design: Domain Service, Application Service

+0

Das macht es noch klarer, danke! – Lucio