Algunos idiomas y versiones incluyen dulces de sintaxis que reducen la necesidad del operador “nuevo”, pero eso no es necesariamente porque “nuevo” es malo, sino que puede ser detallado. Sin embargo, lo más importante es la abundancia de operadores “nuevos” en un programa, que pueden introducir dependencias cableadas que reducen la flexibilidad y pueden complicar el mantenimiento.
Existen varios patrones de software que reducen la introducción de dependencias cableadas. Por ejemplo, Spring Framework implementa un patrón de software llamado “Inyección de dependencia”, que crea e “inyecta” instancias de objetos (beans) siguiendo la configuración especificada en archivos de configuración separados.
Me atrevería a decir que Rod Johnson, quien fundó el marco Spring, no se despertó una mañana con la misión de matar a todos los ‘nuevos’ operadores que pudo encontrar. La principal preocupación era mejorar la capacidad de mantenimiento y la flexibilidad del software, al reducir las dependencias cableadas. ‘nuevo’ resultó ser uno de los principales vehículos para conectar esas dependencias.
- ¿Hay alguna empresa de la red publicitaria que permita la publicidad contextual en dispositivos móviles?
- ¿Cuál es el mejor software ERP actualmente?
- ¿Vale la pena invertir tiempo para aprender Android? ¿Cómo puedo ganar dinero con las aplicaciones de Android?
- ¿Cuál es el mejor grabador de screencast gratuito?
- ¿Qué debe contener un sitio web inmobiliario?
Al final, los objetos ‘nuevos’ todavía se crean todo el tiempo en Spring, pero en la mayoría de los casos eso es controlado por el marco, no por el código de la aplicación.
Creo que DI tiene mucho mérito al proporcionar una mayor flexibilidad y confiabilidad, pero, como todo, también tiene sus costos y puede ser abusado. DI también tiene problemas propios; por ejemplo, el marco introduce una pequeña sobrecarga de ejecución, pero potencialmente significativa.
También he observado que los archivos de configuración que “conectan” las inyecciones de frijoles pueden ser complejos y crecer mucho, lo que los hace potencialmente difíciles de entender y mantener. Además, leer el código puede ser más difícil incluso para un desarrollador Java experimentado que resulta ser nuevo en este tipo de marcos. Cuando se usa Spring, puede que no se vea de inmediato qué beans se están usando o inyectando, ya que puede tener múltiples archivos de configuración, lo que lo hace lidiar con “spaghetti de dependencia”.