2017-01-29 1 views
0

DDD (conception par domaine): Puis-je référencer un référentiel d'une entité différente dans un service d'entité spécifique?Puis-je référencer un référentiel d'une entité différente dans un service d'entité spécifique?

Par exemple (je suis désolé si l'exemple est un peu hors contexte):

Sachant qu'il ya le étudiant et StudentAddress entités

public class StudentService : ServiceBase<Student>, IStudentService { 

    private readonly IStudentAddressRepository _studentAddressRepository; // Is this reference valid? 
    private readonly IStudentRepository _studentRepository; 

    public StudentService(IStudentRepository repository, IStudentAddressRepository studentAddressRepository) : base(repository) 
    { 
     //... IoC 
    }  
} 

Est-ce pour référence StudentAddressRepository ou même pour l'entité StudentAddress valide?

+0

Que fait le service? – tomliversidge

+1

Il semble bizarre que 'StudentService'" soit un "référentiel d'étudiants * et *" ait un "référentiel d'étudiants". Je ne pense pas que ce devrait être un référentiel. Mais cette question est plutôt basée sur l'opinion. –

+0

Je suis désolé. J'ai fait une erreur. C'est vraiment ServiceBase –

Répondre

2

Je pense qu'en termes de DDD, cela est acceptable sur le plan conceptuel, mais cela pourrait parfois indiquer un problème de modélisation possible. Un peu plus de détails concernant les raisons pour lesquelles le service existe serait utile. Dans le livre bleu, Eric Evans a un exemple de service de transfert de fonds qui interagit avec deux objets - compte et grand livre. J'implémenterais ceci en ayant un service de domaine qui accepte les deux objets, plutôt que d'avoir leurs dépôts respectifs dans le constructeur de service de domaine - gardez la responsabilité de les charger dans la couche d'application.

Par exemple, quelque chose comme:

public static class StudentService { 

    public static void WhateverItIsYouAreDoing(Student student, StudentAddress studentAddress) { 
     // do something 
    } 
} 

Une autre chose à penser lors de l'ajout d'un service de domaine, est-t-elle ajouter à la langue omniprésente? Pouvez-vous discuter du service avec un expert du domaine? C'est à dire. "Service de transfert de fonds" est quelque chose que vous pouvez imaginer parler à l'expert du domaine.

+0

Merci pour la réponse. Répondre à la question ci-dessus: Au début, je voudrais récupérer les adresses des étudiants sans utiliser le chargement paresseux, je suis donc venu à la question de savoir s'il serait correct d'appeler ce référentiel (IStudentAddressRepository) et de l'utiliser dans le service étudiant cela amènerait déjà l'étudiant avec son adresse. –

+0

Je n'utiliserais pas de service pour ça, ce n'est pas vraiment ce qu'ils sont. Si vous voulez renvoyer des adresses avec l'étudiant, je voudrais juste avoir une méthode sur le StudentRepository - GetWithAddresses ou quelque chose comme ça. Cependant, cela dépend de ce que vous essayez de faire et pourquoi vous avez besoin des adresses :) – tomliversidge

+0

J'ai besoin des adresses pour afficher sur l'interface utilisateur (MVC). Me conseillez-vous que la récupération de données est entre l'application <---> Repository? (J'initialise DDD). –