我想在我的项目中应用领域驱动设计原则,但无法确定我应该如何处理依赖模型的业务逻辑。
例如,假设这种情况:
我有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,服务应该保持精简(参考)并用于让您将与非域模型相关的业务放入其中。但我相信我所描述的逻辑属于模型本身。
那么,如何处理这些我应该访问相关模型并进行各种自定义验证/过滤器以获取适当数据的逻辑?
谢谢你。