Dagger 2 Android

silsly
2 min readApr 19, 2018

Salah satu library yang digunakan oleh developer untuk menerapkan konsep Dependency Injection

“Dependency Injection (DI) is a design pattern that demonstrates how to create loosely coupled classes”

Dependency Injection (DI) adalah sebuah design pattern yang menunjukkan bagaimana cara untuk membuat loosely coupled classes. Maksudnya yaitu mengurangi terjadinya class yang saling ketergantungan satu sama lain, sehingga developer tidak perlu khawatir akan adanya bugs pada salah satu class yang sewaktu-waktu akan diubah.

Keuntungan

  • Data fleksible/dinamis
  • Mengurangi kemungkinan bugs
  • Mengurangi line of code
  • Mempercepat performa aplikasi

Contoh Kasus

Di bawah ini merupakan contoh aplikasi yang akan menampilkan notifikasi berita pada notifbar. Berikut contoh codenya:

Notification.class, yaitu kelas yang berisi perintah logika untuk mengirimkan notifikasi ke aplikasi pengguna.

public class Notification {
public void sendNotification(String title, String content){
Toast.makeText(this, title +", " +content,
Toast.LENGTH_SHORT).show();
}
}

MyProcess.class, yaitu kelas yang nantinya akan menjalankan perintah yang terdapat di kelas Notification.

public class MyProcess {
private Notification notification = new Notification();

public void processNotification(String title, String content){
this.notification.sendNotification(title, content);
}
}

Memang perintah logic di atas sudah benar dan dapat dijalankan secara baik, hanya saja terdapat sedikit kekurangan dan dapat menjadi celah terjadinya bugs. Kelas MyProcess hanya bertugas untuk memproses notifikasi dari kelas Notification. Padahal bisa saja kelas lain juga membutuhkan proses notifikasi dengan variabel yang berbeda dengan kelas Notification. Tentunya ini dirasa tidak fleksibel sehingga membutuhkan extra waktu dan tenaga bagi developer untuk mengubah struktur kelas agar dinamis. Namun permasalahan ini tentunya dapat diatasi dengan menggunakan Dependency Injection.

Solusinya yaitu dengan mengubah logic. Pada kelas MyProcess tidak lagi mengurusi inisialisasi kelas Notification, melainkan hanya menerima objek dari Notification saja. Berikut codenya:

public class MyProcess {
private Notification notification;
public MyProcess(Notification notification) {
this.notification = notification;
}
public void processNotification(String title, String content) {
this.notification.sendNotification(title, content);
}
}

Dan tambahkan kelas MainActivity:

public class MainActivity extends Activity {

private Notification notification; // Model
private MyProcess process; // Logic

@Override
public void onCreate() {
notification= new Notification(); // Inisialisasi model
process= new MyProcess(notification); // Perintah logic
}
}

Kesimpulan: Dengan begitu kelas apapun meskipun memiliki model kelas yang berbeda tetap akan bisa menggunakan perintah logic sendNotification yang ada pada kelas MyProcess.

--

--