Sì, ma solo se ne hai bisogno.
Il principio di inversione delle dipendenze non significa far funzionare qualcosa ora.
Parla di astrazioni e concrezioni, ma non si tratta proprio di questo.
Riguarda il cambiamento.
Posso far funzionare qualsiasi cosa senza DIP. Seriamente, non esiste un singolo programma che non possa essere scritto completamente senza DIP.
Non usiamo il DIP per soddisfare un requisito. Usiamo il DIP in modo che l'inevitabile nuovo requisito non imponga una riscrittura, ricompilazione e ridistribuzione massiva.
Quindi, hai bisogno DIP qui?
Bene, non c'è molto codice qui da seguire, a parte che è chiaro che ShowUserInfo
conosce User
. La domanda quindi è se ci interessa.
Pensa a questo: User
conosce String
. String
è concreto come viene. Eppure nessuno getta mai DIP a String
. Perché? Perché String
è stabile (improbabile che cambi). Puoi dire la stessa cosa su User
?
Se User
è volatile (probabilmente modificabile), allora è pericoloso per ShowUserInfo
sapere direttamente. Una modifica a User
richiede una modifica a ShowUserInfo
se non c'è DIP. Un'interfaccia più stabile o una classe puramente astratta (non importa quale) aiuta a proteggere da questa volatilità.
Ora serve solo un'astrazione più stabile. DIP può effettivamente fare un po 'di più per te.
DIP consente al flusso di controllo di andare contro la dipendenza del codice sorgente. Ciò ti offre ancora più opzioni per isolare dai cambiamenti.
Di User
e DisplayUserInfo
che pensi sia più stabile?
Il solito schema prevede che le classi di regole aziendali siano le più stabili e le classi di reporting / adattamento che comunicano con il mondo esterno lo siano meno. Ma, se per qualche motivo pensavi che User
fosse meno stabile, potresti usare DIP per invertire la dipendenza del codice sorgente in modo che DisplayUserInfo
non sappia nulla su User
e quindi sia protetto dalla sua volatilità. È meglio conoscere le cose stabili delle cose instabili. Ciò che non sai non ti può ferire.
Questa è la vera cosa bella di quelle frecce aperte < | - vedi nei diagrammi UML. Il flusso del controllo li attraversa all'indietro. Questa inversione di direzione è dove questo principio prende il nome.
Poiché DIP ti consente di sostituire una freccia usa - > con una freccia di attrezzi < | - puntando dall'altra parte, si arriva a decidere cosa sa di cosa indipendentemente da ciò che deve parlare a cosa. Questo è il vero potere di DIP.