Dagger dalam tiga langkah

Dagger dalam tiga langkah

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:

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

Marilah kita kupas satu persatu:

Dependencies InjectionTuti 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:

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;

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;

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;

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.

FrameworkSadar 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 :).