Estoy tratando de usar Dependency Injection tanto como sea posible, pero estoy teniendo problemas cuando se trata de cosas como dependencias de corta duración.¿Las fábricas abstractas usan "nuevo"?
Por ejemplo, digamos que tengo un objeto de administrador de blog que desea generar una lista de blogs que encontró en la base de datos. Las opciones para hacer esto (por lo que puedo decir) son:
- nuevo Blog();
- $ this-> loader-> blog();
- el objeto cargador crea varios otros tipos de objetos como objetos de base de filtros de texto, etc.
- $ this-> blogEntryFactory-> create();
Sin embargo, el # 1 es malo porque crea un fuerte acoplamiento. # 2 todavía parece malo porque significa que la fábrica de objetos debe inyectarse previamente, exponiendo todos los demás objetos que puede crear.
El número 3 parece correcto, pero si utilizo el # 3, ¿pongo las palabras clave "nuevas" en el blogEntryFactory en sí mismo, O, ¿Inyecto el cargador en el blogEntryFactory y uso el cargador?
Si tengo muchas fábricas diferentes como blogEntryFactory (por ejemplo, podría tener userFactory y commentFactory) parecería que poner la palabra clave "nueva" en todas estas fábricas diferentes crearía problemas de dependencia.
Espero que esto tenga sentido ...
NOTA
he tenido algunas respuestas acerca de cómo esto no es necesario para este ejemplo concreto blog, pero no son, de hecho, los casos en los que debería usa el patrón abstracto de fábrica, y ese es el punto en el que estoy llegando. ¿Usas "nuevo" en ese caso o haces otra cosa?
Si no le expliqué esto de manera correcta o exhaustiva, hágamelo saber e intentaré aclarar – johnnietheblack
Nunca he visto que se use la inyección de dependencia en las clases modelo. A menos que la clase 'Blog' encapsule cierta lógica comercial (lo que rara vez ocurre con los modelos), no tiene sentido tratar de reducir el acoplamiento a ella, no hay un comportamiento en el que se pueda emparejar. (Solo existe la estructura de la entidad, pero eso no va a cambiar.) – millimoose
Primero, gracias por el comentario ... ¿entonces estás diciendo que el BlogManager debería/podría llamar "nuevo Blog()"? – johnnietheblack