dependency injection - dependency - Inyección del constructor: ¿Cuántas dependencias son demasiadas?
dependency injection spring (6)
Esto puede ser un signo de que la clase con las dependencias 6-10 en sí necesita ser refactora.
He estado usando DI constructor de inyección manual por un poco ahora. Una cosa que noté es que mis constructores están empezando a ser bastante largos.
Tengo una clase que depende de un montón de pequeños objetos, entre 6 y 10 a veces. A medida que continúo dividiendo mi aplicación en partes más pequeñas, podría ver este número aumentando con el tiempo. ¿Es este un problema común?
Obviamente, esto va a depender mucho del proyecto. Sin embargo, la pregunta básica es esta:
¿Cuándo empiezas a sentirte incómodo con la cantidad de dependencias que tiene una clase? ¿Cuáles son algunas de las estrategias que utiliza para reducir estas dependencias?
Pensaría no más de tres o cuatro. Si está obteniendo más que eso, empezaría a pensar en qué tan bien está abstrayendo sus concerns . Un único objeto de repository , por ejemplo, debe satisfacer todas sus necesidades de recuperación de datos dentro de la clase en cuestión.
Runcible,
Aquí hay un enlace al proyecto Castle Windsor. Es un contenedor de Inversión de Control . Estos contenedores permiten que las clases de fábrica recopilen sus dependencias juntas y las inyecten como un solo objeto en su constructor.
http://www.castleproject.org/container/index.html
He oído cosas buenas sobre Windsor. Spring también hace un contenedor IoC, y hay otros .
También puede querer ver si alguno de los parámetros de su constructor debería combinarse en una sola clase también (asumiendo que los parámetros tienen sentido como clase).
También es posible que desee ver el uso del patrón ServiceLocator para algunas de sus dependencias. Esto es particularmente cierto si tiene que pasar las dependencias por una larga cadena de constructores.
Una clase con 6-10 dependencias es un olor de código. Es una clara indicación de que la clase está violando el principio de responsabilidad única .
¿Cuáles son algunas de las estrategias que utiliza para reducir estas dependencias?
Mark Seemann ha aclarado esa tarea en su post blog.ploeh.dk/2010/02/02/RefactoringtoAggregateServices y más en su libro Dependency Injection en .NET . El hecho de que su clase tenga tantas dependencias indica que hay más de una responsabilidad dentro de la clase. A menudo hay un concepto de dominio implícito que espera ser explicitado identificándolo y convirtiéndolo en su propio servicio. En general, la mayoría de las clases nunca deberían necesitar más de 4-5 dependencias.
Yo no me preocuparía por eso.
En cambio, me preocuparía que la clase fuera demasiado compleja.
Una clase con muchas dependencias que los usa a todos pero no tiene bucles o si las declaraciones están bien. En un código en el que estaba trabajando recientemente, había alrededor de 14 dependencias en una clase. Sin embargo, solo había una ruta a través del código y no había una manera lógica de agrupar las dependencias en mejores clases.
Se debe simplificar una clase con un pequeño número de dependencias que contenga muchas declaraciones de rama o condiciones de bucle complejas.