Per circa 2 mesi ho letto tutto quello che posso trovare per questi 3 argomenti e non sono ancora sicuro di averlo capito.
-
Principio di inversione delle dipendenze . Significa che dovresti sempre fare affidamento solo sulle interfacce e non sulle loro implementazioni. Se la tua classe dipende da un'altra classe, è male, perché dipende dai dettagli di quella seconda classe. Se la tua classe dipende dall'interfaccia, è assolutamente OK, dal momento che questo tipo di dipendenza significa solo che la tua classe ha bisogno di qualcosa di astratto che possa fare qualcosa di specifico e che non ti interessi molto nel modo in cui lo fa.
Poiché P in "DIP" sta per "Principle", dovrei probabilmente definirlo in questo modo: Il principio di inversione delle dipendenze è un principio che richiede che tutte le entità del tuo codice dipendano solo dai dettagli che realmente bisogno .
Per "dettagli di cui hanno veramente bisogno" intendo interfacce per il caso più semplice. Ho anche usato la parola "entità" per sottolineare che il DIP è applicabile anche alle procedure e qualsiasi altra cosa, non solo alle classi.
-
Iniezione di dipendenza . È applicabile solo alle entità abilitate per DI. L'entità abilitata per DI è un'entità che è "aperta" per configurare il suo comportamento senza modificare i suoi interni. Esistono 2 tipi di iniezione di base (quando si parla di classi):
- Iniezione del Costruttore - è quando passi tutti i "dettagli astratti" richiesti all'oggetto proprio nel momento in cui sta per essere costruito.
- Iniezione di setti - è quando "chiari" gli aspetti richiesti dopo che l'oggetto è già stato creato.
Quindi, la definizione è probabilmente come la seguente: Dipendenza L'iniezione è un processo di passaggio dei "dettagli astratti" all'entità che veramente ha bisogno di questi dettagli .
Per "davvero bisogno di questi dettagli" intendo interfacce per il caso più semplice. La parola "entità" è, come sempre, usata per sottolineare che DI è applicabile anche alle procedure e quant'altro.
-
Inversion of Control. Viene spesso definito come "differenza tra librerie e framework", come "scrivere programmi nel modo in cui hai fatto la programmazione procedurale" e così via. Questa è la cosa più confusa per me. Credo che l'idea principale qui sia solo iniziare qualsiasi azione. O fai qualcosa "quando vuoi" (modo procedurale), o "attendi" finché qualcuno non ti chiede (modo IoC).
La mia definizione è: IoC è una proprietà del flusso di esecuzione del tuo programma, quando non fai nulla finché loro ti chiedono di farlo .
Sembra esattamente come "Principio di Hollywood", ma credo che "Hollywood Principle" e IoC siano assolutamente la stessa idea.
Capisco?