Sto tentando di utilizzare la dipendenza dalla dipendenza il più possibile, ma ho problemi quando si tratta di cose come le dipendenze di breve durata.Le fabbriche astratte usano "nuovo"?
Ad esempio, supponiamo di avere un oggetto gestore blog che desidera generare un elenco di blog che ha trovato nel database. Le opzioni per fare questo (per quanto posso dire) sono:
- nuovo Blog();
- $ this-> loader-> blog();
- l'oggetto loader crea vari altri tipi di oggetti come oggetti di database, filtri di testo, ecc
- $ this-> blogEntryFactory-> creare();
Tuttavia, il numero 1 è negativo perché crea un accoppiamento forte. # 2 sembra ancora male perché significa che la fabbrica oggetto deve essere precedentemente iniettata - esponendo tutti gli altri oggetti che può creare.
Il numero 3 sembra a posto, ma se uso # 3, inserisco le "nuove" parole chiave nel blogEntryFactory stesso, OPPURE, inserisco il caricatore nel blogEntryFactory e utilizzo il caricatore?
Se ho molte fabbriche diverse come blogEntryFactory (ad esempio potrei avere userFactory e commentFactory), sembrerebbe che mettere la parola chiave "nuova" in tutte queste diverse fabbriche creerebbe problemi di dipendenza.
Spero che questo ha un senso ...
NOTA
Ho avuto alcune risposte su come questo non è necessario per questo esempio specifico blog, ma ci sono, infatti, i casi in cui si dovrebbe usa il modello astratto di fabbrica, e questo è il punto a cui sto andando. In questo caso usi "nuovo" o fai qualcos'altro?
Se non ho spiegato questo in modo corretto o approfondito, per favore fatemelo sapere, e proverò a chiarire – johnnietheblack
Non ho mai visto l'iniezione di dipendenza in uso su classi modello. A meno che la classe 'Blog' non racchiuda alcune logiche di business (che i modelli raramente fanno), non ha senso cercare di ridurne l'accoppiamento - non c'è alcun comportamento da abbinare. (C'è solo la struttura dell'entità, ma non cambierà.) – millimoose
Innanzitutto, grazie per il commento ... quindi stai dicendo che il BlogManager dovrebbe/potrebbe chiamare "nuovo Blog()"? – johnnietheblack