Sto scrivendo una pratica libreria (la chiameremo Thinger) che si spegne e recupera un documento XML, fa una query X-Path su di esso e fa qualcosa di utile con il risultato di ciò. (Quello che sto facendo è troppo noioso per infastidire tutti, questo è solo un esempio semplificato.)
Poiché sono un programmatore saggio e pigro, sto facendo uso di due componenti di terze parti, uno per il recupero di documenti XML remoti (che chiameremo Fetcher) e uno per l'esecuzione di query X-Path (lo faremo chiamalo Querier).
La mia libreria fornisce una classe Thinger, in cui è necessario iniettare un Fetcher e un interrogante. Potrei farlo tramite setter o un costruttore.
Ma poi penso alle persone povere che usano la mia biblioteca, che ora devono pensare a iniettare le mie dipendenze quando tutto ciò che vogliono veramente è chiamare qualcosa come
new Fetcher()->fetch(someurl);
Finora, ho scritto una fabbrica statica che istanzia un nuovo Thinger, Fetcher e Querier, li assembla come appropriato e restituisce il Thinger.
Questo mi ha lasciato leggermente impuro.
Sicuramente c'è un modo migliore?
Modifica
La maggior parte dei framework ecc probabilmente si aggirerebbe usando un Dependency Injection Container o qualcosa di simile, ma dal momento che sto scrivendo una libreria di terze parti abbastanza piccola che sembra un cattivo approccio.