Isi
- Pendahuluan
- Apa itu Injeksi Ketergantungan, Contoh Ketergantungan
- Belati 2 - Pendahuluan
- Penggunaan pertama Belati 2
Pendahuluan
Artikel ini tidak ditulis oleh programmer canggih untuk kata-kata yang sama, biasa dan dapat dimengerti.
Artikel ini menggunakan kode sampel Kotlin. Belati versi 2.17. Contoh dapat diunduh di akhir artikel.
Apa itu Injeksi Ketergantungan?
Dependency Injection (injeksi atau ketergantungan injeksi) adalah ketergantungan satu kelas pada yang lain. yaitu untuk operasi penuh satu kelas, inisialisasi kelas lain (mereka) diperlukan.
Misalnya, kelas Mobil (mobil) tidak dapat bekerja tanpa kelas Engine, yang pada gilirannya tidak dapat bekerja tanpa kelas Bahan Bakar. Ini terlihat seperti ini:
class Car(private var engine: Engine) class Engine ( private var fuel: Fuel) class Fuel(){ private val fuel = if(BuildConfig.DEBUG){ βbenzineβ } else { βdieselβ } }
Dalam contoh ini, kelas Mobil tergantung pada kelas Mesin, dan itu, pada gilirannya, tergantung pada kelas Bahan Bakar.
Belati 2 - Pendahuluan
Dagger adalah perpustakaan yang membantu mengimplementasikan injeksi ketergantungan:. Ini adalah perpustakaan google. Dokumentasi terperinci
tersedia di sini .
Kelebihan belati:
- Saya harus menulis lebih sedikit kode boilerplate.
- Membantu ketergantungan struktur.
- Ini sangat menyederhanakan pekerjaan ketika ada banyak dependensi
- Kode menjadi mudah dibaca.
Kekurangan belati:
- Kurangnya dokumentasi terperinci
- Dagger mencoba memahami maksud pengembang menggunakan anotasi. Menjadi rumit ketika dia tidak mengerti Anda dengan benar
- belati menghasilkan kode yang sama sulit dikenali
Penggunaan pertama Belati 2
Pertama-tama, Anda perlu menambahkan belati ke aplikasi. Saya tahu 2 metode cara melakukannya
1. Buka build.gradle (App) dan tambahkan jejak.
1.1 Di bagian paling atas di bagian deklarasi plugin
apply plugin: 'kotlin-kapt'
1.2 di bagian dependensi
{ ... kapt "com.google.dagger:dagger-compiler:$dagger_version" implementation "com.google.dagger:dagger:$dagger_version" }
Saya menentukan versi belati (dagger_version) di bagian ini
ext { dagger_version = '2.17' }
Jika ini bukan masalahnya, bagian itu harus ditambahkan di atas bagian android.
2. Tambahkan repositori Maven melalui Struktur Proyek - Dependensi - Tambahkan dependensi perpustakaan
Setelah menyinkronkan proyek, kami siap menerapkan dependensi menggunakan belati.
Pertama, buat kelas Mobil, Mesin, dan Bahan Bakar:
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" } }
Sebelum konstruktor kelas Mobil, Mesin, dan Bahan Bakar, kami menambahkan anotasi Inject belati, sehingga membiarkan belati mengerti bahwa kelas ini harus diterapkan jika perlu. Kami mendapat jejak.
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" } }
Belati perlu tahu cara membuat semua objek yang perlu diimplementasikan. Untuk mendaftar semua kelas yang kami terapkan (Suntikkan), anotasi
Komponen digunakan, yang dideklarasikan untuk antarmuka (DaggerComponent).
Ini terlihat seperti ini:
@Component interface DaggerComponent { fun getCar(): Car fun getEngine(): Engine fun getFuel(): Fuel }
Ketika mendeklarasikan metode komponen, itu bukan nama metode yang penting, tetapi kelas mereka kembali.
Pada langkah ini, Anda perlu membangun sebuah proyek (Build - Rebuild project). Setelah itu, belati akan menghasilkan kelas dan pabrik yang diperlukan untuk menginisialisasi komponen. Nama pabrik akan bertepatan dengan nama antarmuka tempat kita menginisialisasi kelas untuk belati, kecuali bahwa awalan "Belati" akan ditambahkan, mis. pada output, kita mendapatkan kelas DaggerDaggerComponent.
Semuanya sudah siap. Mari kita coba membuat bidang mobil tipe Mobil di MainActivity:
private var car: Car = DaggerDaggerComponent.create().getCar()
Dengan meluncurkan aplikasi, Anda dapat memastikan bahwa bidang mobil diinisialisasi ketika mengaksesnya
Kode sumber