Dolch 2 ist elementar (Teil 1)

Inhalt

  1. Einführung
  2. Was ist Abhängigkeitsinjektion, Abhängigkeitsbeispiel?
  3. Dolch 2 - Einführung
  4. Erster Gebrauch von Dolch 2

Einführung


Der Artikel wurde nicht von einem fortgeschrittenen Programmierer für dieselben, gewöhnlichen und verständlichen Wörter geschrieben.
Dieser Artikel verwendet Kotlin-Beispielcode. Dolch Version 2.17. Ein Beispiel kann am Ende des Artikels heruntergeladen werden.

Was ist Abhängigkeitsinjektion?


Abhängigkeitsinjektion (Injektion oder Abhängigkeitsinjektion) ist die Abhängigkeit einer Klasse von einer anderen. d.h. Für den vollständigen Betrieb einer Klasse ist die Initialisierung der anderen Klasse erforderlich.

Beispielsweise kann die Fahrzeugklasse (Auto) nicht ohne die Motorklasse arbeiten, die wiederum nicht ohne die Kraftstoffklasse arbeiten kann. Es sieht so aus:

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

In diesem Beispiel hängt die Fahrzeugklasse von der Motorklasse ab, und dies hängt wiederum von der Kraftstoffklasse ab.

Dolch 2 - Einführung


Dolch ist eine Bibliothek, die bei der Implementierung der Abhängigkeitsinjektion hilft :. Dies ist eine Google-Bibliothek. Eine ausführliche Dokumentation finden Sie hier .

Vorteile des Dolches:

  • Ich muss weniger Boilerplate-Code schreiben.
  • Hilft bei Strukturabhängigkeiten.
  • Dies vereinfacht die Arbeit erheblich, wenn viele Abhängigkeiten bestehen
  • Code wird leicht lesbar.

Nachteile des Dolches:

  • Fehlende detaillierte Dokumentation
  • Dolch versucht, die Absichten des Entwicklers mithilfe von Anmerkungen zu verstehen. Es wird kompliziert, wenn er dich nicht richtig versteht
  • Dolch erzeugt Code, der genauso schwer zu erkennen ist

Erster Gebrauch von Dolch 2


Zunächst müssen Sie der Anwendung einen Dolch hinzufügen. Ich kenne 2 Methoden, wie es geht
1. Öffnen Sie build.gradle (App) und fügen Sie eine Ablaufverfolgung hinzu.

1.1 Ganz oben im Abschnitt zur Plugin-Deklaration

 apply plugin: 'kotlin-kapt' 

1.2 im Abschnitt Abhängigkeiten

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

Ich gebe die Version von Dolch (dagger_version) im Abschnitt an

 ext { dagger_version = '2.17' } 

Ist dies nicht der Fall, muss der Abschnitt über dem Android-Abschnitt hinzugefügt werden.

2. Fügen Sie das Maven-Repository über die Projektstruktur - Abhängigkeiten - Bibliotheksabhängigkeiten hinzu

Nach der Synchronisierung des Projekts können wir Abhängigkeiten mit Dolch implementieren.

Erstellen Sie zunächst die Klassen Auto, Motor und Kraftstoff:

 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" } } 

Vor den Konstruktoren der Klassen "Auto", "Motor" und "Kraftstoff" fügen wir die Annotation "Dolch einspritzen" hinzu, damit der Dolch versteht, dass diese Klassen bei Bedarf implementiert werden sollten. Wir bekommen die Spur.

 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" } } 

Dolch muss wissen, wie alle Objekte erstellt werden, die implementiert werden müssen. Um alle von uns implementierten Klassen aufzulisten (Inject), wird die Component- Annotation verwendet, die für die Schnittstelle (DaggerComponent) deklariert ist.

Es sieht so aus:

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

Bei der Deklaration von Komponentenmethoden sind nicht die Methodennamen wichtig, sondern die Klasse, die sie zurückgeben.

In diesem Schritt müssen Sie ein Projekt erstellen (Build - Rebuild-Projekt). Danach generiert der Dolch die erforderlichen Klassen und die Fabrik, um die Komponenten zu initialisieren. Der Name der Fabrik stimmt mit dem Namen der Schnittstelle überein, in der wir die Klassen für den Dolch initialisieren, mit der Ausnahme, dass das Präfix "Dolch" hinzugefügt wird, d. H. Am Ausgang erhalten wir die DaggerDaggerComponent-Klasse.

 // 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); } } } 

Alles ist fertig. Versuchen wir, in MainActivity ein Autofeld vom Typ Auto zu erstellen:

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

Durch Starten der Anwendung können Sie sicherstellen, dass das Fahrzeugfeld beim Zugriff darauf initialisiert wird

Quellcode

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


All Articles