Java : Memahami Dependency Injection

DI

Sudah tahu apa itu Dependency Injection?
Minimal sudah pernah dengar apa itu Dependency Injection?
Makanan apa itu?
Jika belum semua atau belum salah satu berarti kamu berada pada tulisan yang tepat πŸ˜€

Dependency Injection atau yang biasa disingkat DI terkenal didunia pemrograman setelah banyak bermunculan framework yang menerapkan konsep ini. Salah satunya dan yang paling terkenal adalah Spring.
DI dimaksudkan agar suatu kelas tidak terikat erat dengan kelas yang lain sehingga hubungan antar bagian kode menjadi longgar (loosely coupled).
Diartikan secara bahasa gampang DI berarti kita memberikan/menginjeksi suatu kelas ke kelas yang lain yang merupakan dependensinya (membutuhkannya).

Mungkin kalau pakai kata-kata gitu sampeyan pada mumet ya πŸ˜€
Saya juga mumet awalnya kalau cuman pakai kata-kata karena belum mudheng apa itu maksudnya hehee
Kalau begitu mari kita pakai contoh koding sadja..

Misal contoh kasus kita mempunyai Kelas Mahasiswa berikut yang merepresentasikan tabel mahasiswa pada database

Untuk melakukan operasi database dari kelas diatas seperti menyimpan mahasiswa, hapus, edit dan query data kita membuat sebuah kelas yang khusus menangani hal tersebut.
Kita buat kelas dengan nama MahasiswaDao

Coba perhatikan kelas diatas.
Sekilas tidak ada yang salah kan? πŸ™‚

Kalau diperhatikan betul-betul pun sebenarnya memang tidak ada yang salah, yang ada adalah kurang elegan.
Perhatikan pada bagian constructor dari kelas diatas.
Disitu kelas ini terlihat membutuhkan (dependent) terhadap Connection untuk melakukan berbagai operasi database.
Lihat pada bagian yang saya highlight
Bagimana cara mendapatkan Connection inilah yang akan kita bahas

Lantas dimana tidak elegannya?
Begini,
Pada aplikasi nyata tentunya kita tidak hanya memiliki tabel mahasiswa bukan?
Masih ada tabel dosen, matakuliah, nilai, user, jadwal, jurusan dan lain-lain bisa sampai banyak sekali tergantung kebutuhan.
Nah.. bisa dibayangkan kalau nanti juga akan ada kelas dengan nama xxxDao lainnya dan setiap kelas dao tersebut memiliki constructor seperti diatas.

Runyamnya disini
Jika misal lokasi server berubah maka kita harus menggantinya 1 per 1 pada setiap kelas dao???
kalau ada ratusan kelas bagaimana???
belum lagi buat Unit Testing menggunakan mock object bagaimana???
sudah paham kan dimana kurang elegannya πŸ˜€

Untuk mengatasi hal tersebut maka kita gunakan Dependency Injection.

Mari kita refactor kelas MahasiswaDao sehingga constructor menjadi seperti ini

Kita Tambahkan parameter pada constructor supaya Connection bisa diberikan (di-injectkan) kepada kelas MahasiswaDao yang membutuhkannya.
Dengan DI ini kelas Dao tidak perlu mengurusi inisialisasi DataSource serta Connection-nya.
Lalu siapa yang melakukan inisialisasi? boleh siapa saja asal bukan kelas Dao itu sendiri.
Untuk contoh sadja kita inisialisasikan pada TestMahasiswaDao misalnya.

Dengan struktur yang seperti itu maka :
– Perubahan cukup dilakukan pada satu tempat
– Unit Testing menjadi mudah
– Bisa menggunakan berbagai macam datasource dengan hanya merubah sedikit konfigurasi (oracle, sql server, dll)

Semoga bermanfaat
πŸ˜€

java

Facebook Comments
 

Agung Setiawan

Agung Setiawan adalah software engineer di BukaLapak.com, penulis sekaligus pecinta sastra, dan pembaca buku

 
Halo, perkenalkan saya Agung Setiawan.
Saya Software Engineer di BukaLapak.
Simak pemikian saya soal dunia Software Engineering via Twitter di @agungsetiawanmu dan facebook
Blog ini saya update seminggu sekali jadi sering-sering saja mampir
Mau belajar Vim bareng saya?
Belajar ngoding dari nol menggunakan PHP

Leave a Reply

Your email address will not be published. Required fields are marked *