Le modèle de domaine anémique est décrit comme un anti-modèle dans la conception pilotée par domaine par Martin Fowler. Pour avoir une logique métier sur les modèles de domaine, des services de domaine sont souvent utilisés. Mais l'injection de services de domaine dans des modèles de domaine est considérée comme nuisible par Vaughn Vernon (voir «Implémentation d'une conception pilotée par domaine, Page 387).
À mon avis, ces opinions sont contradictoires, est-ce vrai? Comment considérer les deux points?
Est-ce un modèle de domaine vraiment riche avec des services de domaine injectés par rapport au modèle de domaine anémique et aux services de domaine normaux ?
domain-driven-design
dependency-injection
services
Sjoerd222888
la source
la source
Réponses:
Un modèle anémique est simplement un conteneur de données. Il ne contient pas de comportement. (Cela pourrait en fait être considéré comme une bonne chose dans le paradigme fonctionnel.) Le contraire d'un modèle anémique n'est pas un modèle injecté plein de services de domaine. Vous décrivez deux extrêmes - les deux sont mauvais.
Si vous avez un modèle anémique, vous n'acceptez pas pleinement ce que propose la POO. Si vous commencez à injecter des services dans ces modèles, vous injectez probablement des préoccupations qui n'y appartiennent pas. Soit cela, soit votre modèle est plus anémique que vous ne le pensez. Sinon, pourquoi auriez-vous besoin du service autre qu'il fournit quelque chose qui est requis mais manquant? (Manquer pourrait signifier anémique.)
Éviter les deux «raconte» conduit à une conception plus solide. Avez-vous quelque chose dans un service dont un modèle a besoin? Il faudrait peut-être le déplacer vers le modèle. Sinon, vous devriez peut-être reconsidérer vos préoccupations. Le comportement d'un modèle doit fonctionner à l' intérieur du modèle. Il devrait principalement (sinon seulement) se préoccuper des membres. Mais rappelez-vous, il y aura toujours des choses qui fonctionnent sur ou avec le modèle. Par exemple, les modèles ne devraient pas ouvrir de connexions TCP ni écouter les événements d'interface utilisateur, même s'ils sont en quelque sorte impliqués. C'est quelqu'un d'autre la responsabilité et que quelqu'un appartient jamais à l' intérieur du modèle.
la source
Ce n'est pas contradictoire. Les deux promoteurs aimeraient que vous mettiez votre code réel dans l'objet de domaine lui-même.
c'est à dire.
vs ADM
vs services injectés
Franchement, chaque approche a ses avantages et ses inconvénients. Celui que vous choisissez est en grande partie une question de préférence personnelle
la source