プロジェクトにドメイン駆動設計の原則を適用したいのですが、依存モデルのビジネスロジックで何をすべきかを判断できませんでした。
たとえば、次のシナリオを想定します。ドメインモデル
が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関連のビジネスをサービスに入れるために使用されます。しかし、私が説明したようなロジックはモデル自体に属すると思います。
では、関連するモデルにアクセスし、適切なデータを取得するためにさまざまなカスタム検証/フィルターを実行する必要があるこれらの種類のロジックを処理するにはどうすればよいですか?
ありがとうございました。