Una de las formas de implementar la inyección de dependencias correctamente es separar la creación de objetos de la lógica comercial. Típicamente, esto implica el uso de una fábrica para la creación de objetos.¿Está bien pasar parámetros a un método de Fábrica?
Hasta este punto, nunca he considerado seriamente el uso de una fábrica así que pido disculpas si esta pregunta parece un poco simplista:
En todos los ejemplos del patrón de la fábrica que he correr a través, siempre ver ejemplos muy simples que no tienen parametrización. Por ejemplo, aquí hay una fábrica robada de Misko Hevery's excelente artículo How To Think About the "new" Operator.
class ApplicationBuilder { House build() { return new House(new Kitchen( new Sink(), new Dishwasher(), new Refrigerator()) ); } }
Sin embargo, ¿qué ocurre si quiero que cada casa que construyo a tener un nombre? ¿Todavía utilizo el patrón Factory si reescribo este código de la siguiente manera?
class ApplicationBuilder { House build(const std::string & house_name) { return new House(house_name, new Kitchen(new Sink(), new Dishwasher(), new Refrigerator()) ); } }
Nota que mi llamada al método de fábrica ha pasado de esto:
ApplicationBuilder builder; House * my_house = builder.build();
A esto:
ApplicationBuilder builder; House * my_house = builder.build("Michaels-Treehouse");
Por cierto: creo que el concepto de separar objeto crear instancias de lógica de negocios es genial, solo intento descubrir cómo puedo aplicarlo a mi propia situación. Lo que me confunde es que todos los ejemplos que he visto del patrón Factory nunca pasan ningún parámetro a la función build().
Para ser claros: no sé el nombre de la casa hasta el momento antes de que necesite crear una instancia.
A menudo he visto fábricas tomar parámetros como lo ha demostrado. No tiene nada de malo. O en términos de tu pregunta. Está perfectamente bien. – grieve