Voglio costruire tre siti in PHP. Lo sto facendo il più lentamente, meditatamente e attentamente possibile, per imparare il più possibile su cose come OOP e architettura software.
Dalle esperienze passate so già che ci sarà un momento in cui sarò lieto di avere funzionalità di logging. Probabilmente voglio avere diversi tipi di log, con cui intendo che in un file .ini
, voglio essere in grado di specificare se la registrazione deve andare in un file di testo (magari un file delimitato da tabulazioni o CSV), un database tavolo, o segnali di fumo. Avrei (diciamo) una classe Logger, che definirebbe, ad esempio, un metodo AddEntry (). Per ogni tipo di registro, creo una sottoclasse che sappia come accedere al file CSV, scrivere su un database o attivare un incendio, rispettivamente.
Poiché so che vorrò avere un'istanza di una sottoclasse, ma non saprò quale sottoclasse istanziare fino al runtime, ho pensato che avrei usato il pattern Metodo di fabbrica. Tuttavia, quando guardo al suo articolo di Wikipedia sto notando che Creator
e ConcreteCreator
hanno un tipo diverso rispetto al Product
, se sto leggendo correttamente l'UML. La mia domanda si riduce a questo:
Voglio avere il metodo factory come metodo statico della classe base di Logger stessa. Se lo faccio, mi sto preparando per una trappola che non vedo ancora? C'è una ragione per cui Creator
e ConcreteCreator
dovrebbero essere di un tipo diverso da Product
?