Aquí hay un ejemplo imaginario genérico hecho para esta publicación. Considere 6 clasesInfierno de dependencia: ¿cómo se pasan las dependencias a objetos profundamente anidados?
TableFactory, TableData, TableCRUD, TableSchema, DBConnect, Logger.
TableFactory
es la clase externa, digamos que tiene un objeto TableData
para una tabla DB.
En este TableFactory
, no hay llamadas a TableSchema
o DBConnect
o logger
. Me refiero a un ejemplo de objetos internos que no se necesitan en el ámbito exterior.
TableData
es una búsqueda interna y opera en los datos, por lo que necesita TableCrud
, DBConnect
y Logger
.
TableCrud
contiene TableSchema
y necesita DBConnect
y Logger
.
DbConnect
itseld, para hacer las cosas divertidas, necesita un registrador. Mi ejemplo ahora tiene 3 alcances de profundidad.
Mi pregunta es bastante simple, si tiene un objeto de 3 (o más) ámbitos que no son invocados por objetos en el ámbito exterior, ¿cómo se envían esos objetos del alcance exterior al interno sin romper la segregación de interfaz Principio -> TableFactory no debería tener que tratar con DBConnect o Logger que necesitan los objetos internos.
Si se respetan los principios de OOP básicos y se pretende una fácil prueba -> se necesitarían objetos externos que requirieran la inyección de los 5 objetos, y luego se obtendrían los objetos necesarios para avanzar más arriba de la cadena. Y los objetos de ámbito interno a su vez requerirían la inyección de las dependencias de sus objetos internos de 3 ámbitos de profundidad, con captadores para esos también. Esto crea objetos de ámbito externo que requieren muchas dependencias y getters para pasarlos.
¿Hay alguna alternativa a esta metodología para pasar objetos, algo que me perdí en el camino? ¡Por favor comparte! Cualquier enlace/comentario apreciado.
+1 amo la forma en que esto se pone, agradable y limpio! – Christian
Gordon -> ¡Rock! ;) Gracias amigo y si alguna vez vienes a Montreal, ¡te debo una cerveza por todas las veces que me has visto! No necesitas el karma de todos modos. – stefgosselin
@stef de nada. No estoy seguro si asistiré a Confoo el próximo año, pero si lo hago, felizmente tomaré una cerveza contigo;) – Gordon