Mengenal Dependency Injection
Dagger merupakan library yang popular digunakan oleh professional android developer di dunia. Jargon yang sering didengar ketika menggunakan dagger adalah Dependency Injection sebelum menggunakan dagger ke project android anda ada baiknya memahami maksud Dependency Injection itu sendiri.
Jadi apakah Dependency Injection itu ?
Dependency Inversion Principle is simply a guideline to write loosely-coupled code.
loosely coupled disini adalah konsep untuk mengurangi ketergantungan (interdependency) dari suatu sistem, jadi meminimalisir suatu class agar tidak terikat dengan class lain.
Contoh Kasus
contoh kasus kali ini anggap saja saya memiliki service untuk mengirim email, classnya adalah sebagai berikut
public class EmailService {
public void sendEmail(String message, String receiver) {
// logic untuk mengirim email
Log.d("tag"," email dikirm ke " + receiver);
}
}
class EmailService ini menyimpan logika untuk mengirim email ke alamat email yang dituju, kemudian untuk main class nya yang bertugas menjalankan service tersebut kurang lebih seperti ini
public class MyPresenter {
private EmailService email = new EmailService();
public void processMessages(String msg, String to) {
this.email.sendEmail(msg, to);
}
}
secara kasat mata tidak ada yang salah dengan implementasi kode diatas, namun logic code diatas memiliki kekurangan.
MyPresenter class bertugas untuk initialize email service dan menggunakannya,padahal email service ini bisa saja digunakan di banyak class, hal ini berujung ke hardcoded dependency, jika kedepannya akan ada perubahan email service maka harus ada perubahan di class MyPresenter dan class lainnya yang menggunakan class EmailService ini, hal ini menyulitkan aplikasi untuk di extend, dan apabila email service digunakan di banyak class hal ini akan lebih mempersulit.
Untuk mengatasi hal tersebut maka kita bisa menggunakan prinsip DI.
DI Manual
Dengan menggunakan prinsip DI maka class MyPresenter tidak lagi mengurusi inisiasi EmailService, presenter tersebut hanya menerima object dari class service lalu menggunakannya. Lalu bagaimana memasukkan class service tersebut kedalam presenter ? salah satu caranya adalah melalu constructor.
public class MyPresenter {
private EmailService email;
public MyPresenter(EmailServices services) {
this.email = services;
}
public void processMessages(String msg, String to) {
this.email.sendEmail(msg, to);
}
}
lalu di activity/fragmentnya kita bisa menggunakannya seperti ini
public class SomeActivity extends AppCompat {
private MyPresenter presenter;
private EmailServices services;
@Override
public void onCreate() {
services = new EmailServices();
// pass services ke presenter
presenter = new MyPresenter(services);
}
}
Leave a Comment