Usted ha leído acerca de los méritos de la inyección de dependencia. ¿Por qué comenzaste a usarlo?
¿Fue debido a la capacidad de cambiar esas dependencias particulares para pruebas o entornos diferentes? ¿Fue para aislar y hacer explícito el orden de una cadena circular de dependencias?
Supongamos, por ejemplo, que fue el deseo de inyectar diferentes clases para fines de prueba (el mérito de DI que me hizo usarlo). ¿Cómo manejas eso sin DI?
Mire la clase de su cuenta. Puede modificar el constructor con una verificación if en algún predicado testMode(), o puede modificar los constructores Db y Session, o podría posiblemente cambiar un archivo de configuración. Cualquiera que sea la solución sin DI que elija, ¿está de acuerdo con eso? ¿Qué pasa con otras dependencias (correo electrónico, registrador, etc.)? ¿Tiene alguna interfaz con sistemas externos que debería simular para probar?
De todos modos, la respuesta podría ser que está satisfecho sin la solución DI y que su aplicación es lo suficientemente pequeña como para administrarla sin ella.Pero es importante hacerse la pregunta de todos modos.
De manera similar, aplique esa misma línea de preguntas a los otros méritos de DI que lo motivaron a comenzar a usarlo.
Por cierto, ¿tiene una instancia de Db en Cuenta y otra en cada una de sus otras clases? ¿Podrías tener solo una instancia? DI ayuda con eso. Puede tener clases singleton sin codificarlas realmente como singleton inyectando siempre la misma instancia.
Por curiosidad, ¿por qué está haciendo su propia inyección de dependencia en lugar de usar una biblioteca DI? La mitad del beneficio del uso de DI es que es limpiamente abstraída por las implementaciones de otras personas. Solo escriba el código que necesita y deje que las bibliotecas se encarguen de hacer la inyección por usted. Esto es similar a la sugerencia de drrcknlsn, pero sin tener que escribir la aplicación real de la clase DependencyInjectionContainer:
$ representan = DependencyInjectionContainer :: acumulación ('Cuenta');
y atornille el resto.
Una buena biblioteca DI debería ver el constructor para Account, darse cuenta de que necesita un Db y una Session, y marchar hacia la cadena de constructores (en este caso, termina allí ya que ambos tienen constructores vacíos). Eso se traduce en tener la misma cantidad de código que el caso sin DI (más los argumentos para el constructor, menos las llamadas a los constructores internos, pero no más basura en la parte superior), con los beneficios que te trajeron a DI en primer lugar.
Dependency Injection no es solo para MVC, es una buena práctica en una amplia gama de proyectos, ya sea que esté usando un framework o no. –
Lo siento, no pretendía dar a entender que lo es, solo que este proyecto no requiere uno. – Isius
Realmente podría hacer que el código sea mucho más limpio al implementar un autocargador para que pueda deshacerse de todas las necesidades (excepto las necesarias para el autocargador, por supuesto). – GordonM