El modelo de dominio anémico se describe como un anti-patrón en el diseño de dominio impulsado por Martin Fowler. Para tener una lógica de negocios en los modelos de dominio, a menudo se utilizan servicios de dominio. Pero inyectar servicios de dominio en modelos de dominio es considerado perjudicial por Vaughn Vernon (ver "Implementación de diseño impulsado por dominio, página 387).
En mi opinión, esas opiniones son contradictorias, ¿es esto cierto? ¿Cómo se pueden considerar ambos puntos?
¿Es realmente un modelo de dominio rico con servicios de dominio inyectados versus modelo de dominio anémico y servicios de dominio normales ?
domain-driven-design
dependency-injection
services
Sjoerd222888
fuente
fuente
Respuestas:
Un modelo anémico es simplemente un contenedor de datos. No contiene comportamiento. (Esto podría considerarse algo bueno en el paradigma funcional). Lo contrario de un modelo anémico no es un modelo inyectado lleno de servicios de dominio. Estás describiendo dos extremos: ambos son malos.
Si tiene un modelo anémico, no está aceptando completamente lo que ofrece OOP. Si comienza a inyectar servicios en esos modelos, es probable que esté inyectando preocupaciones que no pertenecen allí. O eso o tu modelo es más anémico de lo que piensas. ¿Por qué más necesitarías el servicio además de que proporciona algo que se requiere pero falta? (Perder puede significar anémica).
Evitar ambos "avisos" conduce a un diseño más fuerte. ¿Tiene algo en un servicio que un modelo necesita? Tal vez debería trasladarse al modelo. Si no, tal vez debería reconsiderar sus preocupaciones. El comportamiento de un modelo debería funcionar dentro del modelo. Principalmente (si no solo) debe preocuparse por los miembros. Pero recuerde, todavía habrá cosas que funcionen en o con el modelo. Por ejemplo, los modelos no deberían abrir conexiones TCP o escuchar eventos de UI, incluso si de alguna manera están involucrados. Eso es responsabilidad de otra persona y que alguien no pertenece dentro del modelo.
fuente
No es contradictorio. Ambos proponentes desean que coloque su código real en el objeto de dominio mismo.
es decir.
vs ADM
vs servicios inyectados
Francamente, cada enfoque tiene ventajas y desventajas. El que elija es en gran medida una cuestión de preferencia personal
fuente