ドメイン サービスはドメインの概念のみを表す必要があると考えていましたが、ドメイン層インターフェイスの粒度を制御し(ドメインの知識がアプリケーション層に漏れるのを防ぎます)、クライアントをエンティティと値オブジェクトから切り離すためにも使用する必要があるようです。
Eric Evan の DDD 本、pg. 108:
このパターンの説明では、概念をサービスとしてモデル化することの表現力を強調してきましたが、このパターンは、ドメイン層のインターフェースの粒度を制御する手段としても価値があり、クライアントをエンティティと値オブジェクトから切り離すこともできます。
中粒度のステートレス サービスは、単純なインターフェイスの背後にある重要な機能をカプセル化するため、大規模なシステムで簡単に再利用できます。きめ細かいドメイン オブジェクトは、ドメインから、ドメイン オブジェクトの動作が調整されるアプリケーション層への知識の漏えいに寄与する可能性があります。
a)ドメインの概念を表すのではなく、粒度のみを制御するドメイン サービスも導入する場合、ドメインに非ドメインの概念を導入するのではないでしょうか。もしそうなら、それはドメインモデルを傷つけませんか?
b)上位層との通信のほとんどは、中粒度のドメイン オブジェクトを介して行う必要がありますか? したがって、細粒度のドメイン オブジェクトを介して通信が行われるすべてのユース ケースに対して、中粒度のドメイン サービスを導入する必要がありますか?
c) Eric Evan の DDD 本、pg. 108:
コーディング規則により、これらのオブジェクトが単なる SERVICE インターフェイスの配信メカニズムであり、意味のあるドメイン オブジェクトではないことが明確になります。
彼が言及しているコーディング規約は何ですか?
アップデート:
引用文はDomain servicesではなくApplication Servicesを説明していると言っていると思いますか?
私はアプリケーション サービスとその目的を認識していますが、著者はドメイン サービスについて説明していると思います。詳細なドメイン オブジェクトが原因で、アプリケーション層への知識の漏洩が発生する可能性があると警告しているためです。
...エンティティと値オブジェクトからクライアントを切り離すだけでなく。中粒度のステートレス サービスは、単純なインターフェイスの背後にある重要な機能をカプセル化するため、大規模なシステムで簡単に再利用できます。きめ細かいドメイン オブジェクトは、ドメインから、ドメイン オブジェクトの動作が調整されるアプリケーション層への知識の漏えいに寄与する可能 性があります。
また、ドメイン層からアプリケーション層への知識の漏洩を防ぎたい場合、(少なくとも私の論理では)ドメイン層内に「障壁」(すなわち中粒度のサービス) を構築すべきではありませんか?
2 番目の更新:
a)
粒度に関しては、ドメイン サービスはアプリケーション サービスと同様の役割を果たします。
どのようなドメイン サービスについて話しているのですか? 粒度を制御するためだけに作成されたものか...?
b)
IMO、アプリケーションサービスが別のアプリケーション層プロジェクトに存在するか、他のドメインオブジェクトと一緒に存在するかは好みの問題です。
ドメインレイヤー内に存在する場合でも、アプリケーションサービスをサービス(粒度を制御することのみを目的としています)と呼んでいますか?
c)
アプリケーション サービスは、知識の漏洩を防ぐという優れた仕事をしており、ある意味でそれが中心的な仕事です。
しかし、「障壁」(つまり、中粒度のサービス) がアプリケーション層内に存在するため、これは、ドメインの知識がアプリケーション層に漏れることを意味しません(ただし、アプリケーション サービスのおかげではありません)。
d)アプリケーション レイヤーはドメイン レイヤーのクライアントであり、著者は本全体を通して、ドメインの知識がクライアントに漏洩してはならないことを警告していると言えます。アプリケーション層(すなわちアプリケーション サービス) がこの規則の例外であるのはなぜですか?
ありがとう