2

c# を使用して asp.net mvc でドメイン駆動設計を開始しており、作成中の小さなサンプル プロジェクトがあります。現在、ドメイン層、サービス層、Web、およびコンソール アプリケーションのプロジェクトがあります。データベースとしてmongodbも使用しています。

現在、私のプロジェクトには、クラスと呼ばれるグループに属する人々のグループがありGroupPersonドメインレイヤーには以下のようなものがあります(簡略化)。Groupまた、私のmongodbデータベースでPersonコレクションがどのように見えるかを表しています。Group

public class Group
{
   public string Name { get; set; }
   public List<Person> People { get; set; }
}

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

私が理解しているのは私のウェブサイトであり、私のコンソールアプリケーションは、一種のファサードとして機能し、ドメインレイヤーを決して見てはならない私のサービスレイヤーと通信する必要がありますか?

私が確信していないのは、通常、次のようなものを要求すると予想されるすべてのグループについてサービスレイヤーに要求したい場合、コンソールアプリケーションまたは Web サイトにあります。

var groupService = new GroupService();
List<Group> groups =  groupService.GetGroups();

この例を除いて、私のグループとしての人物クラスは、私のコンソールアプリとウェブサイトが知らないドメインレイヤーにありGroupますGroup

私のサービス レイヤーは結果を Json などの別のものとして出力する必要がありますか?それは私の Web サイトやコンソール アプリ次第です。それとも、他の人がアクセスしてこのデータをどう処理するかを判断できる API があるかどうかと言いますか? または、ここで何かが混ざっていますか?

編集:

将来的には、Android アプリで自分のサービスとドメインを使用する予定です。安らぎのサービスを利用しようと考えています。これを公開 API にするつもりはありません (この段階では)。

4

1 に答える 1

4

サービス層は、ドメイン オブジェクトではなく、データ転送オブジェクトと通信します。ドメイン エンティティとデータ転送オブジェクトの違いは、ドメイン エンティティには動作があり、データ転送オブジェクト (DTO) は単なるデータであるということです。

質問に答えると、サービス レイヤーは、データ転送オブジェクトを使用してコンソール アプリケーションまたは Web サイトからコマンドとクエリを取得し、それらをドメイン エンティティに変換します。ドメイン エンティティから結果を取得し、その結果を DTO に変換します。

1 つのドメイン エンティティが DTO にまったく変換されないか、1 つのドメイン エンティティが 10 個の DTO に変換される可能性が非常に高くなります。これらは、2 つの非常に異なる目的で使用される 2 つの非常に異なる API です。私の提案は、ドメイン レイヤーを開発し、その上にサービス レイヤーを構築して、クライアント (コンソールと Web アプリ) のニーズに基づいた通信を可能にすることです。

于 2012-09-16T01:05:38.483 に答える