Aparte de la capacidad de prueba, ¿cuál es la gran ventaja de utilizar D.I. (y no estoy hablando de un marco D.I. o IoC) sobre las clases estáticas? Particularmente para una aplicación donde sabe que un servicio no será reemplazado.Además de las pruebas, ¿cómo es la Inyección de Dependencia mejor que las clases/métodos estáticos?
En una de nuestras aplicaciones C#, nuestro equipo utiliza Inyección de dependencias en la GUI web web, la capa de servicio y la capa de repositorio en lugar de utilizar métodos estáticos. En el pasado, teníamos POCO (objetos de entidad busines) que fueron creados, modificados, pasados y guardados por clases estáticas.
Por ejemplo, en el pasado que podría haber escrito:
CreditEntity creditObj = CreditEntityManager.GetCredit(customerId);
Decimal creditScore = CreditEntityManager.CalculateScore(creditObj);
return creditScore;
Ahora, con DI, el mismo código sería:
//not shown, _creditService instantiation/injection in c-tors
CreditEntity creditObj = _creditService.GetCredit(customerId);
Decimal creditScore = _creditService.CalculateScore(creditObj);
return creditScore;
No es muy diferente, pero ahora tenemos docenas de clases de servicio que tienen un alcance mucho más amplio, lo que significa que debemos tratarlas como si fueran estáticas (es decir, no hay variables de miembros privados a menos que se utilicen para definir otras dependencias). Además, si alguno de esos métodos utiliza un recurso (base de datos/servicio web/etc.), nos resulta más difícil gestionar problemas de concurrencia a menos que eliminemos la dependencia y utilicemos los métodos estáticos antiguos o using(...)
.
"Además de la capacidad de prueba, ¿cuál es la gran ventaja de utilizar D.I." es como decir "aparte de tener un techo sobre mi cabeza, cuál es la gran ventaja de tener un trabajo" para mí. – TrueWill