dependency-injection - injection - inyeccion de dependencias php
¿Deben los objetos de dominio tener dependencias inyectadas en ellos? (2)
Los objetos de dominio no son fábricas, repositorios, etc. Son solo entidades, objetos de valor, servicios de dominio y raíces agregadas. Es decir, deben ser clases que encapsulan los datos que utiliza el dominio de su empresa, las relaciones entre ellos y el comportamiento (modificaciones de lectura) que el dominio puede hacer sobre esos datos.
El repositorio es un patrón para abstraer la infraestructura de persistencia que está utilizando. Está en DDD porque hace que su aplicación se desacople de su base de datos, pero no toda la aplicación DDD necesita ni siquiera debe usar el repositorio.
Factory es un patrón para aislar la lógica de construcción de los objetos. También es una buena práctica recomendada por DDD, pero no realmente necesaria en todos los escenarios.
Los objetos de dominio no deben depender de nada más, porque son el núcleo de su aplicación. Todo dependerá de ellos. Por lo tanto, mantenerlos libres de otras dependencias hace que la cadena de dependencia de una manera sea clara y reduce el gráfico de dependencia. Ellos son los invariantes, el modelo, la base. Cámbialos, y probablemente necesites cambiar muchas cosas. Así que cambiar otras cosas no debería obligarlos a cambiar.
Me refiero específicamente a esta pregunta: DDD - Cómo implementar fábricas
La respuesta seleccionada ha declarado:
"Las fábricas no deberían vincularse con la inyección de dependencia porque los objetos de dominio no deberían tener dependencias inyectadas en ellos".
Mi pregunta es: ¿cuál es el razonamiento de no poder insertar dependencias en sus entidades? ¿O simplemente estoy malinterpretando la declaración? ¿Alguien puede aclarar?
Es un poco viejo, pero realmente quiero abordar esto porque me he encontrado con esto mucho y expresar mi opinión al respecto:
A menudo escucho que Domain Objects no debe "depender" de cosas. Y esto es verdad A menudo veo que la gente extrapola esto para decir que no debemos inyectar cosas en el objeto de dominio.
Eso es lo contrario de lo que significa la dependencia. El dominio no debe depender de otros proyectos, esto es cierto. Pero, el dominio puede definir sus propias interfaces que luego otros proyectos pueden implementar, que luego pueden ser reinyectadas al dominio. Como todos sabemos, eso es lo que se llama Inversión de Dependencia (DI).
Eso es literalmente lo opuesto a tener una dependencia. No permitir DI en el dominio bloquea completamente su habilidad para modelar con precisión el dominio, obliga a violaciones extrañas de SRP, y casi mata la usabilidad de los servicios de dominio.
Realmente siento que debo ser el loco aquí, porque siento que todo el mundo dice "el Dominio no debe tener ninguna dependencia", luego piensa que "ser inyectado con algo significa que dependes de él" y llega a la conclusión "por lo tanto, podemos No inyecte dependencias en el dominio.
Eso nos deja con la maravillosa lógica:
Inversión Dependencia == Dependencia