サービスレイヤーの目的には以下が含まれると思いますか?
- ドメインモデルを間引く(つまり、キャッシング、インスタンス化などの特定の機能の移動)
- ドメインモデルからの依存関係の削減
- APIの最小化
サービスレイヤーの目的には以下が含まれると思いますか?
従来(ドメイン駆動設計を使用していない場合)、サービスレイヤー、または「ビジネスレイヤー」とも呼ばれ、アプリケーションのすべてのビジネスロジックをコーディングします。したがって、たとえば銀行ローンの提供を扱うアプリケーションでは、サービスレイヤーは、特定のローンを提供するかどうかを決定するコードが配置される場所です。明らかに、サービスレイヤーは、ローンの申請者の信頼性を決定できるようにするために、ローンの申請者に関する情報を必要とします。この情報を取得するために、ビジネスレイヤーは「データ」または「リポジトリ」レイヤーを呼び出します。これは、データベースへの情報の抽出と保存を処理します。
サービス層は、永続性やその他のインフラストラクチャの問題などの問題を処理しません。
デザインがドメイン駆動型である場合、antharesの答えは正しいです。
たとえば、ドメイン駆動設計の観点から、ドメインサービスレイヤーは、ドメインオブジェクトのコンテキストで定義できない操作に使用されます。たとえば、オブジェクトCreditCardがある場合、サービスレイヤーでの適切な操作は、新しいクレジットカードの発行です。
より大きなアプリケーションでは、パターンAnemic Domain Modelsが使用されます。この場合、ドメインオブジェクトはデータコンテナとしてのみ使用され、ビジネスロジック全体がドメインサービスレイヤーにあります(これはアンチパターンと呼ばれることもありますが、大きなソリューションでは非常に役立つ場合があります、別の抽象化レイヤーを追加して)。
ただし、異なるソリューションアーキテクチャとパターンでは、サービスレイヤーの目的が異なる場合があります。
名前が示すように、サービスレイヤーは、他のドメインオブジェクトに直接責任を負わないサービスを提供します。
サービスレイヤーは、責任の分離にも役立ちます。サービスレイヤーは、データベース/永続レイヤーとクライアント/ UI/Webレイヤーの中間部分を形成します。
サービスレイヤーを適切に設計することで、Webクライアント、Webサービス(SOA)、モバイルデバイスなど、どのクライアントからでも使用できるようになります。