Inizializzazione di oggetti in un sistema usando l'iniezione di dipendenza

3

Questa è una domanda successiva al seguente post: Iniezione di dipendenze ( DI) in applicazioni c ++

In un sistema che usa DI, qualcuno, da qualche parte, dovrebbe essere responsabile di creare i vari oggetti e "collegarli". Trovo difficile capire chi dovrebbe farlo. Ho letto di un'opzione che dovrebbe essere la "root class". Tuttavia, in quel caso sembra che la classe radice possa essere responsabile della creazione di un numero molto grande di oggetti.

Ho l'opzione di utilizzare classi di builder più piccole che verranno utilizzate nella classe root - è un buon modo per farlo?

Nota: ho taggato "C ++" in questa domanda perché sto sviluppando in C ++. Non sono sicuro che ciò possa fare la differenza per la risposta.

    
posta Erik Sapir 26.03.2014 - 21:05
fonte

2 risposte

3

Dipende dalla durata prevista e dalla proprietà dei tuoi oggetti. Per costruire un oggetto di tipo C è necessario un oggetto di tipo D. Questo oggetto D ha la stessa durata dell'oggetto C? Quindi ha senso costruire l'oggetto D nello stesso ambito in cui è costruito l'oggetto C. L'oggetto D deve vivere più a lungo di C? Quindi dovresti prima costruirlo e passarlo alla funzione che costruisce C.

Dati gli oggetti B, C e D avranno lo stesso ciclo di vita e tale vita sarà controllata da un oggetto di tipo A, ha senso lasciare A costruirli e "legarli". Se l'oggetto D deve vivere più a lungo, deve essere costruito (e distrutto) al di fuori di A.

Se noti che A ottiene troppe responsabilità gestendo altri oggetti dipendenti di B, A potrebbe usare una classe "BFactory" per questo scopo, come @gnat suggerito come risposta alla tua altra domanda. E se vuoi evitare che A debba costruire quella fabbrica, questa fabbrica potrebbe anche essere iniettata in A attraverso un'interfaccia "IBFactory".

E se il tuo sistema ha veramente di grandi dimensioni, perché non devi gestire quattro quattro 400 classi, allora un contenitore DI sarebbe la scelta migliore.

    
risposta data 26.03.2014 - 21:36
fonte
1

Se si utilizza un contenitore DI, il contenitore DI è responsabile della determinazione delle dipendenze necessarie. Se stai iniettando dipendenze tramite il costruttore della classe, il chiamante del costruttore è responsabile.

Quindi nel tuo esempio originale di

A --> B --> C --> D

A sarebbe responsabile della consegna delle dipendenze necessarie a B, B sarebbe responsabile della consegna delle dipendenze necessarie a C e così via.

    
risposta data 26.03.2014 - 21:21
fonte

Leggi altre domande sui tag