La dague 2 est élémentaire (partie 1)

Table des matières

  1. Présentation
  2. Qu'est-ce que l'injection de dépendance, exemple de dépendance
  3. Dague 2 - Introduction
  4. Première utilisation de Dagger 2

Présentation


L'article n'est pas écrit par un programmeur avancé pour les mêmes mots, ordinaires et compréhensibles.
Cet article utilise l'exemple de code Kotlin. Dague version 2.17. Un exemple peut être téléchargé à la fin de l'article.

Qu'est-ce que l'injection de dépendance?


L'injection de dépendance (injection ou injection de dépendance) est la dépendance d'une classe par rapport à une autre. c'est-à-dire pour le fonctionnement complet d'une classe, l'initialisation de l'autre (leur) classe est nécessaire.

Par exemple, la classe Car (voiture) ne peut pas fonctionner sans la classe Engine, qui à son tour ne peut pas fonctionner sans la classe Fuel. Cela ressemble à ceci:

class Car(private var engine: Engine) class Engine ( private var fuel: Fuel) class Fuel(){ private val fuel = if(BuildConfig.DEBUG){ “benzine” } else { “diesel” } } 

Dans cet exemple, la classe Car dépend de la classe Engine, et cela, à son tour, dépend de la classe Fuel.

Dague 2 - Introduction


Dagger est une bibliothèque qui aide à implémenter l'injection de dépendances:. Ceci est une bibliothèque google. Une documentation détaillée est disponible ici .

Avantages du poignard:

  • Je dois écrire moins de code passe-partout.
  • Aide à structurer les dépendances.
  • Il simplifie considérablement le travail lorsqu'il y a beaucoup de dépendances
  • Le code devient facile à lire.

Inconvénients de la dague:

  • Manque de documentation détaillée
  • Dagger essaie de comprendre les intentions du développeur à l'aide d'annotations. Cela se complique quand il ne vous comprend pas correctement
  • poignard génère du code tout aussi difficile à repérer

Première utilisation de Dagger 2


Tout d'abord, vous devez ajouter un poignard à l'application. Je connais 2 méthodes pour le faire
1. Ouvrez build.gradle (App) et ajoutez une trace.

1.1 Tout en haut de la section de déclaration du plugin

 apply plugin: 'kotlin-kapt' 

1.2 dans la section des dépendances

 { ... kapt "com.google.dagger:dagger-compiler:$dagger_version" implementation "com.google.dagger:dagger:$dagger_version" } 

Je spécifie la version de dagger (dagger_version) dans la section

 ext { dagger_version = '2.17' } 

Si ce n'est pas le cas, la section doit être ajoutée au-dessus de la section Android.

2. Ajouter un référentiel Maven via la structure du projet - Dépendances - Ajouter des dépendances de bibliothèque

Après avoir synchronisé le projet, nous sommes prêts à implémenter les dépendances à l'aide de la dague.

Commencez par créer les classes Voiture, Moteur et Carburant:

 class Car constructor(private var engine: Engine) class Engine constructor(private var fuel: Fuel) class Fuel { private val fuelType = if(BuildConfig.DEBUG){ "benzine" }else{ "diesel" } } 

Avant les constructeurs des classes Car, Engine et Fuel, nous ajoutons l'annotation Inject dagger, permettant ainsi à dagger de comprendre que ces classes doivent être implémentées si nécessaire. Nous obtenons la trace.

 class Car @Inject constructor(private var engine: Engine) class Engine @Inject constructor(private var fuel: Fuel) class Fuel @Inject constructor() { private val fuelType = if(BuildConfig.DEBUG){ "benzine" }else{ "diesel" } } 

Dagger a besoin de savoir comment créer tous les objets dont il a besoin pour implémenter. Afin de lister toutes les classes que nous implémentons (Inject), l'annotation Component est utilisée, qui est déclarée pour l'interface (DaggerComponent).

Cela ressemble à ceci:

 @Component interface DaggerComponent { fun getCar(): Car fun getEngine(): Engine fun getFuel(): Fuel } 

Lors de la déclaration de méthodes de composant, ce ne sont pas les noms de méthode qui sont importants, mais la classe qu'ils renvoient.

À cette étape, vous devez créer un projet (Build - Rebuild project). Après cela, le poignard générera les classes et la fabrique nécessaires pour initialiser les composants. Le nom de la fabrique coïncidera avec le nom de l'interface dans laquelle on initialise les classes pour la dague, sauf que le préfixe "Dague" sera ajouté, ie à la sortie, nous obtenons la classe DaggerDaggerComponent.

 // Generated by Dagger (https://google.imtqy.com/dagger). package com.example.dagger2; public final class DaggerDaggerComponent implements DaggerComponent { private DaggerDaggerComponent(Builder builder) {} public static Builder builder() { return new Builder(); } public static DaggerComponent create() { return new Builder().build(); } @Override public Car getCar() { return new Car(getEngine()); } @Override public Engine getEngine() { return new Engine(new Fuel()); } @Override public Fuel getFuel() { return new Fuel(); } public static final class Builder { private Builder() {} public DaggerComponent build() { return new DaggerDaggerComponent(this); } } } 

Tout est prêt. Essayons de créer un champ de voiture de type Car dans MainActivity:

 private var car: Car = DaggerDaggerComponent.create().getCar() 

En lançant l'application, vous pouvez vous assurer que le champ de voiture est initialisé lorsque vous y accédez

Code source

Source: https://habr.com/ru/post/fr466725/


All Articles