Sono un po 'bloccato con un progetto di un progetto, in cui molti oggetti devono avere accesso allo stesso pezzo di informazione. Potrebbero essere alcuni dati, per costruire un oggetto di tipo globale per se stessi o l'oggetto stesso (essenzialmente un oggetto di configurazione).
Essenzialmente questi oggetti sono in un albero: in cima c'è un oggetto 'Router', che ha 'Interface', che ha 'Host'. Il router crea interfacce e l'interfaccia crea gli host. Inoltre, l'oggetto router ottiene quell'oggetto config come parametro nel costruttore.
Vorrei mantenere il codice pulito e facile da testare, mantenendo al minimo il mocking necessario e consentendo facili configurazioni di test.
Quali metodi sono consigliati per fornire accesso a questo oggetto di configurazione attraverso il progetto?
- usa un'istanza singleton dell'oggetto config
- usa un oggetto di configurazione superglobale
- Ogni oggetto (router, interfaccia, host) dovrebbe ottenere l'oggetto config tramite il costruttore - > in ogni nuovo oggetto chiamate ci dovrebbe essere questo oggetto di configurazione. Sarebbe come: Host- > nuovo ({config = > $ self- > config})
- Ogni oggetto dovrebbe avere un riferimento al router genitore. L'interfaccia e l'host avranno accesso al router (che verrà passato a loro nel costruttore - > weak_ref all'oggetto principale del router) e accederanno all'oggetto di configurazione del router
- L'interfaccia avrà un metodo delegato per recuperare l'oggetto config dal router e Host avrà accesso a questo oggetto di configurazione attraverso questo metodo - > questo implica che tutti dovrebbero essere a conoscenza dei suoi genitori (l'host dovrebbe avere un riferimento all'interfaccia genitore, l'interfaccia dovrebbe avere un riferimento al router ecc.)
- O forse un archivio globale di oggetti singleton, da cui tutti possono recuperare ciò che vogliono (oggetti di configurazione, handle del database, ecc.)
- O usa qualche sistema di iniezione delle dipendenze esistente, che sembra un eccesso (molto)