Dagger dalam tiga langkah

V Adhi Pragantha
Karena Kita Vidio
Published in
4 min readNov 18, 2018

Dagger adalah depencies injection framework yang awal mula dikembangkan oleh square dan lalu dilanjutkan oleh google. Framework ini sepertinya telah menjadi menu wajib untuk pengembang aplikasi android. Sayang seribu sayang dokumentasi diluar sana sulit kali untuk dipahami dan membuat pusing kepala ini.

Ditengah kepusingan tersebut penulis dengan lancang mendeklarasikan bahwa sebenarnya hal itu tidaklah sulit, Kita hanya perlu pahami bahwa semua itu perlu proses dan ada tahapannya. Menurut penulis, untuk memahami dagger diperlukannya pemahaman untuk 3 komponen berikut:

  1. Dependencies Injection
  2. Framework
  3. Dagger

Dan ketika kita sudah memahami ketiga hal diatas, bolehlah kita lanjutkan dengan pembahasan dagger yang memerlukan 3 langkah tambahan:

  1. Buat Component
  2. Buat Module
  3. Apikasikan inject pada tempat seharusnya

Marilah kita kupas satu persatu:

Dependencies Injection
Tuti ingin melangsungkan pernikahan impian. Didalam bayangan Tuti adalah ruangan yang besar dengan bunga ciamik, makanan enak dan musik yang bergoyang. Untuk menghadirkan semua ini, Tuti dihadapkan pada pilihan dilematis:

  1. Apakah Tuti perlu untuk mengontak gedung, penyanyi, katering satu per satu?
  2. Apakah Tuti perlu menyewa Event organizer?

Anggaplah pernikahan adalah sebuah object, maka kita perlu membuat sebuat kelas:

class PernikahanTuti{
} // to be added someday

Jujur-jujuran saja tidak ada yang peduli bagaimana pesta pernikahan itu dipersiapkan, pengunjung hanya perlu datang, ucapkan selamat dan lanjutkan hidup. Untuk itu kita hanya perlu satu method: mulaiPesta

Maka kelas kita berubah menjadi seperti berikut:

class PernikahanTuti{
abstract boolean mulaiPesta();
}

Kenapa abstract? karena kita belum menambahkan apa-apa.

Kembali pada pilihan dilematis, anggaplah Tuti adalah seorang expert di bidang pergedungan, makanan dan musik maka kita bisa membuat class PernikahanTuti sebagai berikut:

Class PernikahanTuti{
GedungServices gedungServices;
BungaServices bungaServices;
CateringServices cateringServices;
MusicServices musicServices;
boolean mulaiPesta(){
gedungServices = new GedungServices();
bungaServices = new BungaServices();
cateringServices = new CateringServices();
musicServices = new MusicServices();
// pesta ok adalah ketika makan enak, musik bergoyang,
// bunga harum dan gedung tidak roboh
return cateringServices.isEnak() &&
musicServices.isBergoyang() &&
bungaServices.isHarum() &&
gedung.isTidakRoboh();
}
}

Kita skip langsung ke hari H:

Public static void main(String[] args){
PernikahanTuti nikahan = new PernikahanTuti();
nikahan.mulaiPesta();
}

Weit.. weit … apakah benar semudah itu? Bukankah pemain musik perlu tempatuntuk berlatih? Mau lagu apa? Bukankah catering perlu deskripsi jumlah pengunjung dan butuh musik sesuai dengan makanan? Kepala Tuti mulai pusing dan sejenak perpikir apakah lebih baik kembali menjomblo?

Eits jangan putus asa dulu, setelah rapat dengan para leluhur, maka diputuskan untuk menggunakan jasa event organizer ‘rahasia’. Event organizer ‘rahasia’ ini punya satu tim khusus untuk mencari band ok, satu tim khusus untuk membantu urusan catering dan satu tim khusus untuk urusan mencari gedung yang cocok.

Lega lah perasaan Tuti, pernikahan idaman akhirnya mungkin bisa terwujud juga. Tapi beberapa kali manager dari event organizer ‘rahasia’ bertemu dengan Tuti, mbak Tuti yang manis, untuk band nanti setelah potong kue yah, terus juga untuk catering mohon kasih kabar jumlah tamu wanita, laki-laki dan anak-anak. Oh iya gedung juga minta nanti tamu wanita dari pintu kanan dan tamu pria dari pintu kiri. Semua aturan ini di ikuti oleh Tuti, toh Tuti tidak perlu lagi secara langsung mengurus band, catering dan sebagainya. Kadang-kadang Tuti ingin mengetahui progress dan mengontak event organizer ‘rahasia’, event organizer ‘rahasia’ akan mengirim band untuk mendemokan lagu yang akan dibawakan.

Tentu kita perlu mengubah sedikit dari class kita, sekarang menjadi :

Class PernikahanTuti{
GedungServices gedungServices;
BungaServices bungaServices;
CateringServices cateringServices;
MusicServices musicServices;
boolean mulaiPesta(){

// pesta ok adalah ketika makan enak, musik bergoyang, bunga //harum dan gedung tidak roboh
return cateringServices.isEnak() &&
musicServices.isBergoyang() &&
bungaServices.isHarum() &&
gedung.isTidakRoboh();
}
}

Loh, loh engga bener ini, kalau object sebelum di initialize error dong?? Iya, good eye!, jadi kita ubah lagi class-nya:

Class PernikahanTuti{
GedungServices gedungServices;
BungaServices bungaServices;
CateringServices cateringServices;
MusicServices musicServices;
public PernikahanTuti( GedungServices gdSer,
BungaServices bSer, CateringServices ctrSer,
MusicServices mServices){
gedungServices = gdSer;
bungaSevices = bSer;
//… dan selanjutnya..
}
boolean mulaiPesta(){

// pesta ok adalah ketika makan enak, musik bergoyang, bunga harum dan gedung tidak roboh
return cateringServices.isEnak() &&
musicServices.isBergoyang() &&
bungaServices.isHarum() &&
gedung.isTidakRoboh();
}
}

Dan tentu di hari H perlu kita ubah juga:

Public static void main(String[] args){
EventOrganizer rahasia = new Rahasia();
PernikahanTuti nikahan =
new PernikahanTuti(rahasia.getGedung(),
rahasia.getBunga(),
rahasia.getCateting(),
rahasia.getMusician() );
nikahan.mulaiPesta();
}

Perhatikan di kelas PernikahanTuti kita ‘memberikan’ hal yang dibutuhkan oleh Tuti, dengan kata lain kebutuhan Tuti di inject oleh EventOrganizer. Teknik menulis kode seperti ini lah yang sering di sebut sebagai dependencies injection.

Framework
Sadar tidak bahwa eventOrnizer sudah mulai mengatur sedikit demi sedikit dan Tuti mengikuti anjuran tersebut, ada beberapa kejadian dimana event organizer ‘Rahasia’ mengancam untuk tidak melanjutkan kerjasama ketika misalnya Tuti ingin masakan non halal masuk kedalam menu.

Aturan-aturan ini yang harus di ikuti jika ingin hidup lebih mudah bisa dikatakan sebagai framework, dengan artian kita melepaskan sedikit kebebasan kita dengan harapan kita bisa maju lebih lanjut.

Lalu siapakah event organizer ‘rahasia’ itu, apakah punya hubungan dengan spring? Punya hubungan dengan dagger? Mari kita simak pembahasan itu di lain kali.

To be continue(?)
Apakah tulisan ini mudah di pahami? Apakah enjoyable to read? Mohon berikan clap atau boo hasil dari voting akan menentukan seri tulisan ini akan dilanjutkan atau dihentikan.

Tidak pernah apik untuk menutup sebuah tulisan jadi viele Grusse? Sampai ketemu di lain kesempatan.

Bagian kedua bisa cek disini, thanks berat :).

--

--