IT knowledge base
CTRL+F per cercare la tua parola chiave

Dagger 2 per sviluppatori Android principianti - Introduzione

Questo articolo è la prima parte di una serie di articoli destinati, secondo l'autore, a coloro che non possono occuparsi dell'iniezione di dipendenza e del framework Dagger 2 , o semplicemente lo faranno. Originale scritto il 18 novembre 2017. Le immagini e le GIF provengono dall'originale. Traduzione gratis.
Immagine
Dagger 2 è un framework di iniezione delle dipendenze in fase di compilazione completamente statico per Java e Android . Dagger 2 è un adattamento supportato da Google del framework Dagger di Square .

Per chi è questo articolo?

Se sei uno sviluppatore Android principiante che studia Android direttamente e contemporaneamente acquisisce conoscenza di Java , allora questo articolo fa per te. Se hai provato a imparare Dagger 2 e quello che hai trovato su Internet ti è sembrato un po' difficile - non preoccuparti, ci sono passato anch'io (siamo tutti un po' speciali, ognuno ha bisogno di un approccio diverso nello spiegare qualcosa) e questo l'articolo fa sicuramente al caso tuo. Se hai già familiarità con Dependency Injection e Dagger , puoi imparare qualcosa di nuovo o chiarire alcune cose per te stesso.

Serie di articoli

Requisiti

Si presume che tu abbia già familiarità con il linguaggio di programmazione Java , i principi OOP e lo sviluppo Android .

Cos'è la dipendenza?

Nota: userò le analogie della serie TV Game of Thrones per spiegare questo concetto. Se non hai familiarità con questa serie, puoi sostituire i nomi delle classi con quelli più convenienti per te. E dovresti assolutamente iniziare a guardare questo spettacolo.
Comprendere le dipendenze e le relazioni è il primo passo per ottenere una comprensione più chiara dei concetti di programmazione orientata agli oggetti. Allora cos'è la dipendenza? Ad esempio, abbiamo una classeTargaryens che usa un'altra classe o interfaccia chiamata internamenteDragons ... Quindi classeTargaryens dipende dalla classe o dall'interfacciaDragons ...
GIF

Ciò significa che la classeTargaryens non posso lavorare senzaDragons ... Significa anche che ovunque verrà utilizzata la classeTargaryens la classe sarà presenteDragons , cioè, non possiamo riutilizzareTargaryens nessun riutilizzoDragons ... In questo casoTargaryens È la classe dipendente, eDragons - È dipendenza. Il tossicodipendente dipende dalle loro dipendenze.
Due classi che si usano a vicenda sono chiamate "accoppiate" . La relazione tra le classi può essere "stretta" o "allentata" . Le dipendenze sono sempre dirette, cioè la classeTargaryens dipende daDragons ma classeDragons potrebbe non dipendere dalla classeTargaryens ...
class Targaryens {
        public Targaryens () {
                // Every time we use Targaryens we need to instantiate Dragons
                Dragons dragons = new Dragons ();
                dragons.callForWar ();
        }
}

Perché le dipendenze fanno male?

Un gran numero di dipendenze in una classe porta a problemi di dipendenza difficile , il che è negativo per i seguenti motivi:
  • Le possibilità di riutilizzo del codice sono ridotte.
  • Il processo di test diventa più complicato.
  • La manutenibilità del codice peggiora man mano che il progetto cresce.

# Riutilizzabile (riutilizzabilità)

Quando classi e metodi sono accoppiati in modo lasco, non correlati o indipendenti da molti altri, la riutilizzabilità del codice aumenta. Il riutilizzo del codice è una delle idee di base della programmazione orientata agli oggetti.

#Test

Per i test, puoi simulare oggetti specifici. Ma se ci sono molte dipendenze in una classe o in un metodo, sarà difficile testarlo. Se la classe Java (ad esempio,Targaryens ) crea un'istanza di un'altra classe (Dragons ) tramite l'operatorenew , allora questa classe (Targaryens ) non può essere testato indipendentemente dalla classe creata tramite l'operatorenew (Dragons ).

# Supportato (mantenibilità)

Quando il codice non può essere testato correttamente, parti di esso sono impossibili o difficili da riutilizzare e il progetto continua a crescere, allora il progetto diventa molto difficile da mantenere. La manutenibilità dipende da molti altri fattori, ma finché i nuovi sviluppatori del tuo team comprendono il sistema e rendono più confortevole il lavoro dei colleghi, il tuo progetto è ancora supportato.

Tipi di dipendenza

Esistono molti tipi di dipendenze, ma si possono distinguere le principali:
  • Dipendenza dalle classi.
  • Dipendenza dalle interfacce.
  • Dipendenza da metodi o campi.
  • Dipendenza diretta e indiretta.

# Dipendenza dalle classi

Abbiamo visto un esempio di dipendenza di classe in precedenza. Costruttore di classiTargaryens dipende o ha bisogno di una classeDragons chiamare il metodocallForWar() ...

# Dipendenza dalle interfacce

MetodoexecutePlan accetta l'interfacciaWarStrategy come dipendenza.WarStrategy può essere venduto da tutte le casate (Targaryen, Stark, Lannister e così via).
public Result executePlan (WarStrategy strategy) {
  // WarStrategy is implemented by all houses
}

# Dipendenza da metodi o campi

Il seguente metodo prende un oggettoHouseClass , e il metodo che chiamagetKing() è una dipendenza che non può essere identificata nella firma del metodo.
public String extractName (HouseClass house) {
  return house.getKing ();
  // returns the name of the king of a particular house
}

# Dipendenze dirette e indirette

Permettetemi di divagare con un altro esempio. ClasseTargaryens dipende dalla classeStarks nella conquista del trono. MaStarks dipendono da altri regni del nord, per esempio,Mormont ... Quindi si scopre cheTargaryens dipendono direttamente daStarks e indirettamente daMormont ...

Sommario

Se una classe Java crea un'istanza di un'altra classe tramite l'operatorenew , quindi questa classe non può essere utilizzata o testata indipendentemente dalla classe creata tramite l'operatorenew ... Questa si chiama dipendenza.
Le dipendenze sono cattive perché riducono la riutilizzabilità del codice e complicano anche il processo di test, il che rende il progetto più difficile da mantenere.
Le dipendenze possono essere di vario tipo: classe, interfaccia, da metodi, da campi, dirette, indirette e altre.

Qual è il prossimo?

Nel prossimo articolo parleremo della risoluzione dei problemi di dipendenza difficile , e sì, hai ragione, attraverso l'iniezione di dipendenza. Diamo un'occhiata a un esempio reale, troviamo una connessione forte e analizziamolo.