Principio di inversione delle dipendenze: come definire "politica di alto livello" e "dettagli di basso livello" ad altre persone?

13

Sto cercando di spiegare il principio dell'inversione di dipendenza ai miei colleghi (per lo più giovani). Come possiamo definire qual è la "politica di alto livello" e qual è il "dettaglio di basso livello" in un software? Ad esempio, se il nostro software automatizza il flusso di lavoro di diverse applicazioni aziendali, perché diciamo che l'automazione del flusso di lavoro è la politica di alto livello e le applicazioni aziendali sono i dettagli?

    
posta Louis Rhys 17.04.2013 - 15:28
fonte

3 risposte

9

Nota: questo è stato completamente riscritto dal mio precedente esempio

Pensa alle prese di corrente. In ogni nazione, la politica di alto livello è che le prese di corrente sono sempre le stesse. Non importa da dove arrivi l'elettricità (carbone, gas, nucleare), le prese sul muro dovrebbero sempre fornire la stessa quantità di energia, attraverso lo stesso set di connettori.

Ora puoi collegare qualsiasi dispositivo a quella presa, perché hanno tutti un'interfaccia comune, la "spina". La politica di alto livello non deve mai dettare alcuna parte di tali dettagli di implementazione. Basta collegare qualcosa e va.

Ora, se hai un dispositivo che non vuole l'alimentazione CA - forse funziona su un circuito a 7V DC - puoi ancora usare quella politica di alto livello, hai solo bisogno di una sorta di adattatore tra l'alimentatore e il dispositivo. Inoltre, poiché tutti hanno lo stesso criterio di alto livello, il produttore può crearlo nell'implementazione, senza modificare la politica di alto livello. La persona che collega l'implementazione alla politica (tu, inserendo il tuo laptop in) non ha davvero bisogno di capirlo.

Inoltre, se il produttore vuole vendere lo stesso dispositivo in un altro paese, tutto ciò che devono fare è sviluppare un adattatore diverso. Pertanto, la stessa implementazione può funzionare con più policy, mentre la stessa policy può eseguire più implementazioni.

Questo è un perfetto esempio di inversione di dipendenza.

Ma ecco la parte interessante: torna a ciò che ho detto prima. "Non importa da dove tieni l'elettricità." Questo è anche un dettaglio di implementazione. Il criterio di alto livello è che tutte le prese di corrente hanno la stessa forma ed emettono lo stesso tipo di alimentazione. I dettagli di implementazione di basso livello sono entrambi da dove proviene l'elettricità e che cosa esegue.

In termini di programmazione, ciò significa che la politica di alto livello è l'interfaccia (dove una lingua lo supporta.Un'altra forma di DI è la digitazione anatra) che un'API fornisce e l'applicazione consuma e i dettagli di implementazione di basso livello sono entrambe le applicazioni che lo consumano e l'API stessa, nessuna delle quali deve capirsi l'un l'altra.

Gli adattatori possono essere utilizzati per adattare la stessa implementazione a politiche diverse.

    
risposta data 17.04.2013 - 16:16
fonte
7

L'approccio classico al riutilizzo del software consiste nel creare componenti che non dipendono da nient'altro (ovvero ciò che li rende di basso livello), e quindi creare componenti di livello superiore che dipendono da componenti di livello inferiore. "alto livello" e "basso livello" sono determinati in modo specifico dalla direzione della dipendenza, che non è inerente alla funzione del componente, ma spesso solo una decisione architettonica.

Quindi, quando le singole applicazioni aziendali vengono create senza dipendere dall'automazione del flusso di lavoro, ma il controller del flusso di lavoro ha dipendenze dirette per l'applicazione aziendale, dovrebbe essere chiaro che l'automazione del flusso di lavoro è una "politica di alto livello" e il business l'applicazione è un componente di "basso livello". Nota che questa struttura non è obbligatoria: se il tuo componente di automazione del flusso di lavoro è un framework generale, che non è accoppiato alle tue applicazioni aziendali specifiche, ma può essere configurato per servire diverse applicazioni, hai già iniziato ad applicare il DIP. In questa situazione, la separazione "alto livello" / "basso livello" potrebbe non avere più senso tra queste due cose.

Quindi, il nome "inversione di dipendenza" è in qualche modo fuorviante - poiché le dipendenze non sono "inverse", ma completamente rimosse (o per essere più precise: cambiate dalle dipendenze del tempo di compilazione in dipendenze del tempo di esecuzione).

    
risposta data 17.04.2013 - 16:20
fonte
1

Uso un'immagine semplice per spiegare DIP. La visione classica dello sviluppo del software è come un processo di costruzione con ogni livello che si trova in cima ai livelli inferiori che lo supportano. Usare il principio di inversione delle dipendenze è più come costruire un cellulare.

Piuttosto che gli strati superiori seduti sugli strati inferiori, i livelli superiori nell'interfaccia mobile con gli strati inferiori tramite la stringa che li collega. In un certo senso, gli strati inferiori dipendono da quell'interfaccia per il supporto (senza che la stringa cadrebbe). Questo è DIP in poche parole.

    
risposta data 17.04.2013 - 17:33
fonte

Leggi altre domande sui tag