Я хотел бы применить принципы проектирования Driven Driven в моем проекте, но не мог определить, что я должен делать с бизнес-логикой зависимых моделей.сложная, многодоменная логика: на уровне обслуживания или в самой модели?
Например, предположим, что этот сценарий:
У меня есть Person
и Car
модели предметной области. Каждый человек подходит для покупки определенных автомобилей из db в зависимости от возраста/бюджета/предпочтений/и т. Д. В моей модели я хотел бы иметь Список автомобилей (SuitableCars
), которые подходят для этого Человека.
public class Person
{
public List<Car> SuitableCars {get; set;}
}
Но для того, чтобы сделать это прямо сейчас, я вызвать метод обслуживания (GetSuitableCarsForPerson
) к (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, услуги должны быть тонкими (ref) и используются, чтобы вы положили Not-DomainModel-Родственный бизнес в них. Но я считаю, что логика, как то, что я описал, принадлежит самой модели.
Итак, как обращаться с такими видами логики, где я должен обращаться к соответствующим моделям и выполнять различные пользовательские проверки/фильтры, чтобы получить соответствующие данные?
Спасибо.