私はプロジェクトでドメイン駆動設計の原則を適用したいと思いますが、従属モデルのビジネスロジックで何をすべきかを判断できませんでした。複雑なマルチドメイン関連のロジックを配置する:サービス層またはモデル自体に?
たとえば、このシナリオを想定します。
私はPerson
とCar
のドメインモデルを持っています。各人は年齢/予算/嗜好などに基づいて特定の車をDBから購入するのに適しています。私のモデルでは、この人にふさわしい車リスト(SuitableCars
)を持っていたいと思います。
public class Person
{
public List<Car> SuitableCars {get; set;}
}
しかし、今それを行うためには、私は(リポジトリとDI)をDBからデータをフェッチするために、サービスメソッド(GetSuitableCarsForPerson
)を呼び出す必要があり、私の(時にはかなり複雑なマルチモデルに依存)カスタムロジックを実行します車を取得します。
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);
}
}
、サービスが薄く維持されなければならない(ref)とあなたがそれらにない-ドメインモデル関連のビジネスを入れてみましょうするために使用されています。しかし私は、私が記述したような論理はモデルそのものに属すると信じています。
関連するモデルにアクセスし、さまざまなカスタム検証/フィルタを実行して適切なデータを取得する必要があるこれらの種類のロジックをどのように処理するのですか?
ありがとうございます。