La inyección de dependencia (DI) es un patrón bien conocido y de moda. La mayoría de los ingenieros conocen sus ventajas, como:
- Hacer que el aislamiento en las pruebas unitarias sea posible / fácil
- Definición explícita de dependencias de una clase
- Facilitar un buen diseño ( principio de responsabilidad única (SRP) por ejemplo)
- Habilitar las implementaciones de conmutación rápidamente (en
DbLogger
lugar de,ConsoleLogger
por ejemplo)
Creo que existe un amplio consenso en la industria de que la DI es un patrón bueno y útil. No hay demasiadas críticas en este momento. Las desventajas que se mencionan en la comunidad son generalmente menores. Algunos:
- Mayor número de clases.
- Creación de interfaces innecesarias.
Actualmente discutimos el diseño de arquitectura con mi colega. Es bastante conservador, pero de mente abierta. Le gusta cuestionar cosas, lo que considero bueno, porque muchas personas en TI simplemente copian la última tendencia, repiten las ventajas y, en general, no piensan demasiado, no analizan demasiado.
Las cosas que me gustaría preguntar son:
- ¿Deberíamos usar la inyección de dependencia cuando solo tenemos una implementación?
- ¿Deberíamos prohibir la creación de nuevos objetos, excepto los de lenguaje / marco?
- ¿Inyectar una sola implementación es una mala idea (digamos que tenemos solo una implementación, por lo que no queremos crear una interfaz "vacía") si no planeamos probar la unidad en una clase en particular?
UserService
clase, esa es solo un titular de lógica. Se inyecta una conexión de base de datos y se ejecutan pruebas dentro de una transacción que se revierte. Muchos llamarían a esto una mala práctica, pero descubrí que esto funciona extremadamente bien. No necesita contorsionar su código solo para realizar pruebas y obtendrá el error de encontrar el poder de las pruebas de integración.