0

私のドメイン モデルには、次のような Entity オブジェクトがあります。

public class Group
{
    public int idGroup { get; set; }
    public string Description { get; set; }
}

このオブジェクトのリポジトリがあります:

public class GroupRepository : IGroupRepository
{
    public Group LoadGroup(int idGroup)
    {
        //imitation of SQL data reader
        Group g = new Group();
        g.idGroup = Convert.ToInt32(r["idTipoGrupo"]);
        g.Description = Convert.ToString(r["Descricao"]);
        return g;
    }
}

しかし今、作成したリポジトリの新しい関数を使用して、グループ オブジェクトに関するデータ ストアから追加情報を取得する必要があります。必要なフィールドは次のとおりです。

public bool HasChildGroups { get; set; }
public int ChildGroupsCount { get; set; }
public bool HasDeals { get; set; }
public int DealsCount { get; set; }

これらのプロパティは、私には「サービス」または「ヘルパー」プロパティのように見えます。アプリケーションのどこでも使用するつもりはなく、数回だけ使用する予定ですが、必要です。私が考えることができる最も簡単なことは、これらの「サービス」プロパティを Group オブジェクトに追加し、それらを設定するメソッドをリポジトリに作成したことです。しかし、これはエンティティであり、ここでは必要ないため、これは間違っていると考えています。では、そのような「サービス」オブジェクトはどこに保管すればよいのでしょうか? 次のように継承する新しいクラスを作成する必要がありますかGroup:

public class GroupHelper : Group
{
    public bool HasChildGroups { get; set; }
    public int ChildGroupsCount { get; set; }
    public bool HasDeals { get; set; }
    public int DealsCount { get; set; }
}

または、いくつかのデータ転送オブジェクトの使用を検討する必要がありますか? この問題をどのように解決しますか?どんな助けでも感謝します。

4

2 に答える 2

2

最初に尋ねる質問は、提案されたGroupHelperオブジェクトの状態をどのように管理するかです。GroupHasChildGroupsなどの属性は、エンティティで呼び出された動作の結果として変更されるようです。もしそうなら、それらはあなたのドメインモデルのファーストクラスのエンティティ、おそらくグループエンティティ自体のイベント部分でなければなりません。プロパティがドメインモデルの外部で管理されている場合は、他の外部データソースと同じようにそのデータをクエリできます。これをスタンドアロンオブジェクトにします。おそらく、GroupInfoグループ自体を拡張しないようなものと呼ばれます。

ここで問題と思われるのは、エンティティの形状と一致していないクエリ要件があることです。その場合、読み取りモデルをドメインモデルから切り離す柔軟性があります。読み取りモデルはクエリ要件を満たすことを目的としており、ドメインモデルはドメインに関連付けられた動作をホストすることを目的としています。

于 2012-11-20T16:44:05.997 に答える
1

HasChildGroups [...] 私には「サービス」または「ヘルパー」プロパティのように見えます [...] しかし、これはエンティティであり、ここでは必要ないため、これは間違っていると考えています。

Groupオブジェクトがデータ アクセス オブジェクトであると考えていて、viewdata などの別のモデルがある場合は、その通りです。

ただし、これは、ビュー固有およびデータベース固有のコードを提供する、ファット クラスである可能性もあります。それは単純に間違っているわけではありません。

GroupDTOアプリケーションで必要なプロパティを提供するクラスを実際に作成できますが、データ アクセスには必要ありません。

于 2012-11-20T16:50:19.547 に答える