¿Cómo evitar la locura del constructor de inyección de dependencias?

Resuelto JP Richardson asked hace 14 años • 10 respuestas

Encuentro que mis constructores están empezando a verse así:

public MyClass(Container con, SomeClass1 obj1, SomeClass2, obj2.... )

con una lista de parámetros cada vez mayor. Dado que "Contenedor" es mi contenedor de inyección de dependencias, ¿por qué no puedo hacer esto?

public MyClass(Container con)

para cada clase? ¿Cuáles son las desventajas? Si hago esto, siento como si estuviera usando una estática glorificada. Comparta sus pensamientos sobre la locura de IoC y la inyección de dependencia.

JP Richardson avatar Mar 11 '10 03:03 JP Richardson
Aceptado

Tiene razón en que si usa el contenedor como localizador de servicios, es más o menos una fábrica estática glorificada. Por muchas razones, considero que esto es un antipatrón (consulte también este extracto de mi libro).

Uno de los maravillosos beneficios de la inyección de constructores es que hace que las violaciones del principio de responsabilidad única sean notoriamente obvias.

Cuando eso suceda, es hora de refactorizar a Facade Services . En resumen, cree una nueva interfaz más detallada que oculte la interacción entre algunas o todas las dependencias detalladas que necesita actualmente.

Mark Seemann avatar Mar 10 '2010 20:03 Mark Seemann

No creo que los constructores de su clase deban tener una referencia al período de su contenedor IOC. Esto representa una dependencia innecesaria entre su clase y el contenedor (¡el tipo de dependencia que el COI intenta evitar!).

derivation avatar Mar 10 '2010 20:03 derivation

La dificultad de pasar los parámetros no es el problema. El problema es que su clase está haciendo demasiado y debería dividirse más.

La inyección de dependencia puede actuar como una advertencia temprana para las clases que se vuelven demasiado grandes, específicamente debido al creciente dolor de aprobar todas las dependencias.

kyoryu avatar Mar 11 '2010 05:03 kyoryu