J'utilise une approche de type DDD pour un module entièrement nouveau d'une application existante; ce n'est pas 100% DDD en raison de l'architecture mais j'essaie d'utiliser certains concepts DDD. J'ai un contexte borné (je pense que c'est le terme approprié - j'apprends encore sur DDD) composé de deux entités: Conversation
et Message
. La conversation est la racine, car un message n'existe pas sans la conversation et tous les messages du système font partie d'une conversation.
J'ai une ConversationRepository
classe (bien que cela ressemble plus à une passerelle, j'utilise le terme "référentiel") qui trouve des conversations dans la base de données; lorsqu'il trouve une conversation, il crée également (via les usines) une liste de messages pour cette conversation (exposée en tant que propriété). Cela semble être la bonne façon de gérer les choses car il ne semble pas être nécessaire d'avoir une MessageRepository
classe complète car elle n'existe que lorsqu'une conversation est récupérée.
Cependant, quand il s'agit de sauvegarder un Message, est-ce la responsabilité du ConversationRepository, car c'est la racine agrégée du Message? Ce que je veux dire, est-ce que je devrais avoir une méthode sur ConversationRepository appelée, par exemple, AddMessage
qui prend un Message comme paramètre et l'enregistre dans la base de données? Ou dois-je avoir un référentiel séparé pour trouver / enregistrer des messages? La chose logique semble être un référentiel par entité, mais j'ai également entendu "un référentiel par contexte".
la source
Vous pouvez créer le ConversationService et injecter le IConversationRepository et IMessageRepository dans son constructeur. Utilisez des référentiels pour des opérations CRUD simples et des services pour tout le reste (mise en cache, sauvegarde de la logique, etc.)
la source