Uno dei modi per implementare correttamente Dipendenza Iniezione è quello di separare la creazione dell'oggetto dalla logica aziendale. In genere, ciò comporta l'utilizzo di una Factory per la creazione di oggetti.È OK passare i parametri ad un metodo di fabbrica?
Fino a questo punto, non ho mai seriamente pensato di utilizzare una fabbrica quindi mi scuso se questa domanda sembra un po 'riduttivo:
In tutti gli esempi del modello di fabbrica che ho imbattuto in, ho sempre vedi esempi molto semplici che non hanno parametrizzazione. Ad esempio, ecco una fabbrica rubata da Misko Hevery's articolo eccellente How To Think About the "new" Operator.
class ApplicationBuilder { House build() { return new House(new Kitchen( new Sink(), new Dishwasher(), new Refrigerator()) ); } }
Tuttavia, cosa succede se voglio che ogni casa che costruisco abbia un nome? Sto ancora usando il pattern Factory se riscrivo questo codice come segue?
class ApplicationBuilder { House build(const std::string & house_name) { return new House(house_name, new Kitchen(new Sink(), new Dishwasher(), new Refrigerator()) ); } }
Nota che il mio metodo di fabbrica chiamata è cambiato da questo:
ApplicationBuilder builder; House * my_house = builder.build();
A tal:
ApplicationBuilder builder; House * my_house = builder.build("Michaels-Treehouse");
A proposito: Penso che il concetto di separazione oggetto istanziare dalla logica di business è fantastico, sto solo cercando di capire come posso applicarlo alla mia situazione. Ciò che mi confonde è che tutti gli esempi che ho visto del pattern Factory non passano mai alcun parametro nella funzione build().
Per essere chiari: non conosco il nome della casa fino al momento prima ho bisogno di istanziarlo.
Ho visto spesso le fabbriche prendere i parametri come hai mostrato. Non c'è niente di sbagliato in questo. O in termini di domanda. È perfettamente ok – grieve