Trataré de encontrar por qué mi COI podría no ser bueno desde mi perspectiva.
Como con todo lo demás, el contenedor IOC (o como lo diría Einstein I = OC ^ 2) es un concepto que debe decidir por sí mismo si lo necesita o no en su código. La reciente protesta de la moda sobre el COI es solo eso, la moda. No caigas en la moda, eso es lo primero. Hay miles de conceptos que podrías implementar en tu código. En primer lugar, estoy usando la inyección de dependencia desde que comencé a programar y aprendí el término cuando se popularizó con ese nombre. El control de la dependencia es un tema muy antiguo y se abordó hasta ahora de billones de maneras, dependiendo de lo que se estaba desacoplando de qué. Desacoplar todo de todo es una tontería. El problema con el contenedor IOC es que intenta ser tan útil como Entity Framework o NHibernate. Si bien escribir un mapeador relacional de objetos es simplemente obligatorio tan pronto como tenga que acoplar cualquier base de datos con su sistema, el contenedor IOC no siempre es necesario. Entonces, cuando el contenedor IOC es útil:
- Cuando tienes una situación con muchas dependencias que quieres organizar
- Cuando no le importa acoplar su código con un producto de terceros
- Cuando sus desarrolladores quieran aprender a trabajar con una nueva herramienta
1: No es tan frecuente que tenga tantas dependencias en su código, o que las conozca al principio del diseño. El pensamiento abstracto es útil cuando el pensamiento abstracto es debido.
2: acoplar su código con código de terceros es un problema enorme. Estaba trabajando con código que tiene más de 10 años y que seguía en ese momento conceptos sofisticados y avanzados ATL, COM, COM + y así sucesivamente. No hay nada que pueda hacer con ese código ahora. Lo que estoy diciendo es que un concepto avanzado ofrece una ventaja aparente, sin embargo, esto se cancela a largo plazo con la ventaja obsoleta en sí. Simplemente lo había hecho todo más caro.
3: El desarrollo de software es lo suficientemente difícil. Puede extenderlo a niveles irreconocibles si permite que algún concepto avanzado se recorte en su código. Hay un problema con IOC2. Aunque desacopla las dependencias, también desacopla el flujo lógico. Imagine que ha encontrado un error y necesita establecer un descanso para examinar la situación. IOC2, como cualquier otro concepto avanzado, lo está haciendo más difícil. Arreglar un error dentro de un concepto es más difícil que arreglar un error en un código simple, porque cuando arreglas un error, un concepto debe ser obedecido nuevamente. (Solo para darle un ejemplo, C ++ .NET cambia constantemente la sintaxis tanto que necesita pensar mucho antes de refactorizar alguna versión anterior de .NET). Entonces, ¿cuál es el problema con IOC? El problema está en resolver dependencias. La lógica para resolver está comúnmente oculta en el propio IOC2, escrito tal vez de manera poco común que necesita aprender y mantener ¿Su producto de terceros estará allí en 5 años? Microsoft no lo era.
El síndrome "Sabemos cómo" está escrito por todas partes con respecto a IOC2. Esto es similar a las pruebas de automatización. Término elegante y solución perfecta a primera vista, simplemente pone todas sus pruebas a ejecutar durante la noche y ve los resultados por la mañana. Es realmente doloroso explicar compañía tras compañía lo que realmente significan las pruebas automatizadas. Las pruebas automatizadas definitivamente no son una forma rápida de reducir la cantidad de errores que puede introducir de la noche a la mañana para aumentar la calidad de su producto. Pero, la moda está haciendo que esa noción sea molestamente dominante. IOC2 sufre el mismo síndrome. Se cree que necesita implementarlo para que su software sea bueno. Cada entrevista reciente Me preguntaron si estoy implementando IOC2 y automatización. Esa es una señal de moda: la compañía tenía una parte del código escrito en MFC que no abandonarán.
Necesita aprender IOC2 como cualquier otro concepto en software. La decisión de si es necesario utilizar IOC2 es del equipo y de la empresa. Sin embargo, al menos TODOS los argumentos anteriores deben mencionarse antes de tomar la decisión. Solo si ve que el lado positivo supera el lado negativo, puede tomar una decisión positiva.
No hay nada malo con IOC2, excepto que solo resuelve los problemas que resuelve e introduce los problemas que presenta. Nada más. Sin embargo, ir en contra de la moda es muy difícil, tienen la boca sudorosa, los seguidores de todo. Es extraño cómo ninguno de ellos está allí cuando el problema con su fantasía se hace evidente. Se han defendido muchos conceptos en la industria del software porque generan ganancias, se escriben libros, se realizan conferencias y se fabrican nuevos productos. Eso es moda, generalmente de corta duración. Tan pronto como las personas encuentran algo más, lo abandonan por completo. IOC2 es útil pero muestra los mismos signos que muchos otros conceptos desaparecidos que he visto. No sé si sobrevivirá. No hay una regla para eso. Piensas que si es útil, sobrevivirá. No, no va de esa manera. Una gran empresa rica es suficiente y el concepto puede morir en pocas semanas. Ya veremos. NHibernate sobrevivió, EF quedó en segundo lugar. Quizás IOC2 también sobrevivirá. No olvide que la mayoría de los conceptos en el desarrollo de software no tienen nada de especial, son muy lógicos, simples y obvios, y a veces es más difícil recordar la convención de nomenclatura actual que comprender el concepto en sí. ¿El conocimiento de IOC2 hace que un desarrollador sea un mejor desarrollador? No, porque si un desarrollador no pudo idear un concepto similar al IOC2, entonces le será difícil entender qué problema está resolviendo IOC2, usarlo parecerá artificial y puede comenzar a usarlo. en aras de ser una especie de políticamente correcto. No olvide que la mayoría de los conceptos en el desarrollo de software no tienen nada de especial, son muy lógicos, simples y obvios, y a veces es más difícil recordar la convención de nomenclatura actual que comprender el concepto en sí. ¿El conocimiento de IOC2 hace que un desarrollador sea un mejor desarrollador? No, porque si un desarrollador no pudo idear un concepto similar al IOC2, entonces le será difícil entender qué problema está resolviendo IOC2, usarlo parecerá artificial y puede comenzar a usarlo. en aras de ser una especie de políticamente correcto. No olvide que la mayoría de los conceptos en el desarrollo de software no tienen nada de especial, son muy lógicos, simples y obvios, y a veces es más difícil recordar la convención de nomenclatura actual que comprender el concepto en sí. ¿El conocimiento de IOC2 hace que un desarrollador sea un mejor desarrollador? No, porque si un desarrollador no pudo idear un concepto similar al IOC2, entonces le será difícil entender qué problema está resolviendo IOC2, usarlo parecerá artificial y puede comenzar a usarlo. en aras de ser una especie de políticamente correcto. ¿El conocimiento de IOC2 hace que un desarrollador sea un mejor desarrollador? No, porque si un desarrollador no pudo idear un concepto similar al IOC2, entonces le será difícil entender qué problema está resolviendo IOC2, usarlo parecerá artificial y puede comenzar a usarlo. en aras de ser una especie de políticamente correcto. ¿El conocimiento de IOC2 hace que un desarrollador sea un mejor desarrollador? No, porque si un desarrollador no pudo idear un concepto similar al IOC2, entonces le será difícil entender qué problema está resolviendo IOC2, usarlo parecerá artificial y puede comenzar a usarlo. en aras de ser una especie de políticamente correcto.