Diciamo che voglio creare un elenco di stringhe (che non è il caso dello scenario reale, ma suona più semplice da spiegare).Se una fabbrica ha un costruttore con parametri?
avrei un'interfaccia per la mia lista di stringhe fabbrica che sarebbe simile a questa
public interface IStringsListFactory{
List<string> Create();
}
Ma diciamo un mio fabbrica di cemento richiederebbe per ottenere questo elenco di stringa da un file/etc di database ..
public class StringsListFromFile : IStringsListFactory{
private StreamReader _streamReader;
public StringsListFromFile(StreamReader sr) //StreamReader is just an example.
{
_streamReader = sr;
}
public List<string> Create(){
///recover the strings using my stream reader...
}
}
so che questo approccio avrebbe funzionato, ma mi chiedevo se si rompe il modello di fabbrica per passare i parametri al costruttore della fabbrica in modo da non rompere il mio interfaccia. Ci sono delle controparti a fare questo? C'è un'altra soluzione a cui non ho pensato? Sto facendo troppe domande!?! (Sì, conosco la risposta a questo!)
Perché la mia fabbrica ha uno stato da quando il mio membro è incluso nella mia classe? E sta restituendo IEnumerable un problema di prestazioni? – TopinFrassi
Usando il mio disegno al punto 2, puoi istanziare il tuo corso una volta, e poi usare diversi 'StreamReader' senza dover creare un altro oggetto della stessa classe. È un'altra storia, se il tuo StreamReader iniettato è una specie di configurazione globale. Ma ha bisogno di un altro design per ottenere risultati migliori. – Fendy
Restituire 'IEnumerable' è solo un'abitudine di fare' Programma su un'interfaccia piuttosto che su un programma per l'implementazione'. L'interfaccia che restituisce "IEnumerable" può far sì che restituisca anche un array, o un'altra raccolta come "ObersvableCollection". – Fendy