2017-05-26 3 views
1

Ceci est ma structure actuelle de code pour la couche d'affaires -peut-POCO/objets de domaine ont des dépendances injectées à ce

  • UserManager (classe de service) fonctionne sur l'utilisateur (objet de domaine)
  • CompanyManager (classe de service) travaille sur la société (objet domaine)

maintenant, mes deux objets de domaine dépendent

  • IUnitOfWork - (utilise IUserRepository, ICompanyRepository)

J'ai lu des articles où il est dit que les objets de domaine ne devraient pas avoir de dépendances sur les dépôts. Donc, ma question est en deux parties -

  1. Si les objets de domaine ne devraient pas avoir de dépendances? Dans le cas ci-dessus, que se passe-t-il si une opération sur 'Company' doit déclencher une opération sur 'User', alors l'objet Company peut-il avoir une dépendance sur UserManager?
  2. Si l'objet de domaine ne doit pas avoir de dépendances, alors où dois-je conserver ces logiques? Où devrais-je appeler la méthode save sur le référentiel, ou un appel à UserManager quand quelque chose se passe sur 'Company'?

Merci!

+0

objets de domaine ne devrait jamais avoir une dépendance à l'égard IUnitOfWork –

+2

« UserManager (classe de service) fonctionne sur l'utilisateur (objet de domaine) » - ce qui ne « fonctionne » veut dire? –

Répondre

3

En DDD, la couche de domaine sera la couche la plus interne qui encapsule toute la logique de domaine. Il est recommandé de ne pas avoir de dépendances dans vos classes de domaine.

Dans votre scénario, il est idéal pour utiliser Domain Events

  1. domaine de l'entreprise devrait générer un événement, par exemple "OnPolicyChanged", et cet événement doit être écouté dans UserManager et le gestionnaire doit appeler la logique de domaine dans le domaine utilisateur.

  2. Il n'est pas idéal d'inclure la logique de persistance dans votre couche de domaine. Il devrait être à un niveau supérieur, par ex. Une couche de service/infrastructure qui doit valider les modifications de la base de données.