He estado leyendo mucho sobre Inyección de Dependencia, Inversión de Control y contenedores IoC. También programo principalmente en lenguajes dinámicos (PHP en el trabajo, Python en casa). Estas son las cosas que estoy encontrando, pero esto deja muchas lagunas para mí para llenar ya que las piezas de él todos juntos:Contenedores Ioc e idiomas dinámicos (toma 2)
- Why are IOC containers unnecessary with dynamic languages?
- Why do I need an IoC container as opposed to straightforward DI code?
- Advantages an IoC container provides beyond simple DI (blog)
Entonces, lo que estoy leyendo es: los contenedores IoC son mucho más importantes en los lenguajes estáticos, porque es mucho más fácil realizar DI en los lenguajes dinámicos. Pero también brindan beneficios mucho más allá de DI, como la administración de dependencias por usted y evitando tener que unir una docena de objetos a mano. Y, por cierto, son complicados, así que no intentes hacerlos tú mismo (pero no existen los buenos para PHP).
Siento que esta información me deja un poco ... estancada. ¿Que hago con esto? Trabajo en una base de código muy grande, con dependencias muy complicadas (y probablemente una gran necesidad de refactorización, pero ese es otro problema paralelo). Hemos hecho muy mal la implementación de DI hasta ahora, y realmente estoy tratando de orientarnos en la dirección correcta. Simplemente parece que no hay nada por ahí en lo que respecta a los lenguajes dinámicos y IoC (o al menos contenedores de IoC).
¿Es mejor que me relacione con las dependencias "a mano" por el momento, y me preocupe por automatizarlo en un contenedor más adelante, después de que tenga un mejor manejo de los principios? ¿Vale la pena implementar mi propio contenedor de IoC? ¿O el beneficio simplemente no vale la pena el costo en PHP?
¿Probaste http://components.symfony-project.org/dependency-injection/ container? – Mchl
@mchl: Ese realmente se ve bastante bien. ¡Gracias! (Sin mencionar, su documentación es una de las mejores descripciones de un contenedor de IoC que he visto aún ... hubiera sido útil cuando estaba calculando todo esto) – keithjgrant
@mchl: Tu enlace es lo más útil que he ya lo he visto Muévelo en una respuesta, y la recompensa es suya si nada sale mejor. – keithjgrant