0

プロジェクトにドメイン駆動設計の原則を適用したいのですが、依存モデルのビジネスロジックで何をすべきかを判断できませんでした。

たとえば、次のシナリオを想定します。ドメインモデル
Personあります。Car各人は、年齢/予算/好みなどに基づいて、dbから特定の車を購入するのに適しています。私のモデルではSuitableCars、この人物に適した車のリスト()が必要です。

public class Person
{
    public List<Car> SuitableCars {get; set;}
}

しかし、今それを行うには、サービスメソッド(GetSuitableCarsForPerson)を呼び出してdb(リポジトリを使用したDI)からデータをフェッチし、(時にはかなり複雑なマルチモデルに依存する)カスタムロジックを実行して車を取得する必要があります。

public class PersonService : IPersonService
{
    private IRepository _repo;

    public PersonService(IPRepository repository)
    {
        _repo = repository;
    }

    public List<Car> GetSuitableCarsForPerson(Person person)
    {
        // business goes here right now.
    }

}

したがって、SuitableCarsプロパティの宣言は次のようになります。

private IPersonService _personService;
public List<Car> SuitableCars 
{
    get
    {
        // I have to inject a PersonService in my model. Bad practice?
        return _personService.GetSuitableCarsForPerson(this);
    }
}

AFAIK、サービスはthin(ref)に保つ必要があり、Not-DomainModel関連のビジネスをサービスに入れるために使用されます。しかし、私が説明したようなロジックはモデル自体に属すると思います。

では、関連するモデルにアクセスし、適切なデータを取得するためにさまざまなカスタム検証/フィルターを実行する必要があるこれらの種類のロジックを処理するにはどうすればよいですか?
ありがとうございました。

4

2 に答える 2

1

うまくいけば、この回答https://stackoverflow.com/a/1209765/145595は、続行する方法のガイダンスを提供します。

于 2012-04-30T21:09:12.890 に答える
0

人に適した車のセットの定義は、人のモデル以外の要因に依存し、人によって異なる可能性があるようです。適切な車のセットは、人の好みだけでなく、すべての車のセットにも依存します。車のセットは人によって異なります。したがって、特定の人に適した車のセットは、適切な車のセットを決定する操作のキャッシュです。これらの観察結果は、リポジトリまたはドメインサービスが人に適した車のセットを返す必要があり、人と適切な車のセットとの関連付けを人のモデルに直接表現してはならないことを示しています。人物モデルで直接表現するのに適切な関連付けとなるのは、人物が優先モデルとして指定した車のセットです。この場合、人物は「モデルの設計方法の詳細な取り扱いに関するこのシリーズの記事。

于 2012-05-01T17:05:42.800 に答える