8

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:

  1. nuovo Blog();
  2. $ this-> loader-> blog();
    • l'oggetto loader crea vari altri tipi di oggetti come oggetti di database, filtri di testo, ecc
  3. $ 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?

+0

Se non ho spiegato questo in modo corretto o approfondito, per favore fatemelo sapere, e proverò a chiarire – johnnietheblack

+0

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

+0

Innanzitutto, grazie per il commento ... quindi stai dicendo che il BlogManager dovrebbe/potrebbe chiamare "nuovo Blog()"? – johnnietheblack

risposta

4

Non sono esperto, ma ho intenzione di fare un tentativo. Ciò presuppone che Blog sia solo un oggetto modello di dati che funge da contenitore per alcuni dati e viene riempito dal controller (new Blog non è molto significativo). In questo caso, Blog è una foglia del grafico dell'oggetto e l'utilizzo di new è corretto. Se stai per testare metodi che devono creare uno Blog, devi testare simultaneamente la creazione dello Blog in ogni caso, e l'utilizzo di un oggetto fittizio non ha senso .. lo Blog non persiste oltre questo metodo.

Ad esempio, supponiamo che PHP non abbia un costrutto di array ma abbia un oggetto Collections. Chiameresti $this->collectionsFactory->create() o saresti soddisfatto di dire new Array;?

+0

Illuminante con la spiegazione foglia. – johnnietheblack

+1

Tandu, come ho appena detto sopra, anche se questo scenario potrebbe non meritare una fabbrica, ci sono scenari in cui le fabbriche sono meritate. In questi casi, usi "nuovo" in fabbrica o fai qualcos'altro? – johnnietheblack