Halo sobat koding… Kali ini gw mau bahas dependency injection, mungkin bagi programmer metode ini tidak asing. Jadi apa itu dependency injection? dan apa keuntungannya?
Depedency Injection (DI) adalah teknik yang banyak digunakan dalam pemrograman dan sesuai dengan pengembangan Android. Dengan mengikuti prinsip-prinsip DI, kalian mengatur dasar arsitektur aplikasi yang baik. DI merupakan sebuah teknik untuk mengatur cara bagaimana suatu objek dibentuk ketika terdapat objek lain yang membutuhkan. Ada 2 istilah dalam DI, yaitu:
- Service, merupakan suatu objek atau komponen yang melakukan tugas tertentu, dan dapat digunakan oleh client.
- Client, merupakan suatu objek atau komponen yang mempunyai ketergantungan terhadap objek
Service
dalam mengerjakan tugas nya
Namun objek Service
juga bisa menjadi Client
untuk objek Service
lainnya, begitu juga dengan objek Client, bisa juga sebagai Service
untuk objek Client
lainnya.
Ayo kita mengenal lebih dalam lagi tentang Dependency Injection
Kode diatas merupakan kode yang tidak menggunakan dependency injection. Kenapa begitu ? karena class Car
menyusun Engine
-nya sendiri. Hal ini dapat menjadi masalah karena:
Car
danEngine
disandingkan dengan erat – instanceCar
menggunakan satu jenisEngine
, dan tidak ada subclass atau implementasi alternatif yang dapat digunakan dengan mudah. JikaCar
menyusunEngine
-nya sendiri, Anda harus membuat dua jenisCar
, bukan hanya menggunakan kembaliCar
yang sama untuk mesin berjenisGas
danElectric
.- Dependensi keras pada
Engine
membuat pengujian menjadi lebih sulit.
Lalu, bagaimana kode yang menggunakan dependency injection ?
Kurang lebih seperti kode diatas. Fungsi main
menggunakan Car
. Karena Car
bergantung pada Engine
, aplikasi akan membuat instance Engine
, kemudian menggunakannya untuk membuat instance Car
. Manfaat pendekatan berbasis DI ini adalah:
- Penggunaan kembali
Car
. Anda dapat meneruskan berbagai implementasiEngine
keCar
. Misalnya, Anda dapat menentukan subclassEngine
baru yang disebutElectricEngine
dan Anda inginkan agar digunakan olehCar
. Jika menggunakan DI, Anda hanya perlu meneruskan instance subclassElectricEngine
yang diperbarui, danCar
akan tetap berfungsi tanpa adanya perubahan lebih lanjut. - Pengujian
Car
secara mudah. Anda dapat meneruskan pengujian ganda untuk menguji skenario yang berbeda. Misalnya, Anda dapat membuat pengujian gandaEngine
yang disebutFakeEngine
dan mengonfigurasinya untuk pengujian yang lain.
Ada dua cara utama nih untuk melakukan dependency injection pada Android:
- Injeksi Konstruktor : Ini adalah cara yang dideskripsikan di atas. Anda meneruskan dependensi class ke konstruktornya.
- Injeksi Kolom (atau Injeksi Penyetel) : Class framework Android tertentu, seperti aktivitas dan fragmen, dibuat instance-nya oleh sistem, sehingga injeksi konstruktor tidak dapat dilakukan. Dengan injeksi kolom, dependensi akan dibuat instance-nya setelah class dibuat. Kodenya akan terlihat seperti ini:
Nah, di Android juga ada library-library pendukung untuk DI seperti: Dagger, RoboGuice, ButterKnife, Android Annotation, Koin, dan lain-lain.
Saat ini gw lagi suka pakai Hilt karena pemakaiannya yang sederhana dan bisa dibilang mudah.
Hilt adalah library yang direkomendasikan Jetpack untuk injeksi dependensi di Android. Hilt mendefinisikan cara standar untuk melakukan DI dalam aplikasi Anda dengan menyediakan container untuk setiap class Android dalam project Anda dan mengelola siklus prosesnya secara otomatis untuk Anda. Hilt ditambahkan pada library DI yang populer Dagger untuk mendapatkan manfaat dari ketepatan waktu kompilasi, performa runtime, skalabilitas, dan dukungan Android Studio yang disediakan oleh Dagger. Jika kalian ingin mempelajari lebih lanjut tentang Hilt, lihat Injeksi Dependensi dengan Hilt.
Jadi kesimpulan yang bisa diambil dari pembahasaan ini adalah :
- Penggunaan DI dapat memaksimalkan penggunaan class dan pemisahaan depedency atau sederhanya kode dapat digunakan kembali atau re-use.
- Jika kalian membuat unit test, teknik ini cocok untuk diimplementasikan karena akan sangat membantu.
- DI juga memudahkan dalam pemfaktoran ulang, dependensi menjadi bagian permukaan API yang dapat diverifikasi, sehingga dapat diperiksa pada waktu pembuatan objek atau pada waktu kompilasi, bukan disembunyikan sebagai detail implementasi.
Mungkin itu dulu yang bisa gw jelaskan tentang Depedency Injection.
Semoga bermanfaat untuk sobat koding semua, thank you
See you…