Je voudrais appliquer les principes de conception guidée par les domaines dans mon projet, mais je ne pouvais pas déterminer ce que je devais faire avec la logique métier des modèles dépendants.mettre la logique complexe, multi-domaine: dans la couche Service ou dans le modèle lui-même?
Par exemple, supposons que ce scénario:
je Person
et Car
modèles de domaine. Chaque personne est apte à acheter certaines voitures de db en fonction de l'âge/budget/préférences/etc. Dans mon modèle, je voudrais avoir une liste de voitures (SuitableCars
) qui sont appropriées pour cette personne.
public class Person
{
public List<Car> SuitableCars {get; set;}
}
Mais afin de le faire en ce moment, je dois appeler une méthode de service (GetSuitableCarsForPerson
) pour extraire des données de db (DI avec dépôt), exécutez mon (parfois assez complexe dépendant de plusieurs modèles) une logique personnalisée et obtenir les voitures.
public class PersonService : IPersonService
{
private IRepository _repo;
public PersonService(IPRepository repository)
{
_repo = repository;
}
public List<Car> GetSuitableCarsForPerson(Person person)
{
// business goes here right now.
}
}
Ainsi, la déclaration de SuitableCars
propriété deviendra:
private IPersonService _personService;
public List<Car> SuitableCars
{
get
{
// I have to inject a PersonService in my model. Bad practice?
return _personService.GetSuitableCarsForPerson(this);
}
}
AFAIK, les services devraient être conservés mince (ref) et sont utilisés pour vous permettre de placer les entreprises non-DomainModel liés à eux. Mais je crois que la logique comme celle que j'ai décrite appartient au modèle lui-même. Alors, comment gérer ces types de logiques où je devrais accéder à des modèles pertinents et faire divers validations/filtres personnalisés pour obtenir les données appropriées?
Merci.