post image


Dependency Injection (DI) adalah sebuah design pattern yang memungkinkan kita untuk menulis kode yang lebih baik, dimana DI menitikberatkan pada penulisan kode yang loosely coupled, highly modular dimana ketergantungan antar class tidaklah tinggi, sehingga kita dapat mengubah sebuah class tanpa diliputi rasa khawatir class tersebut membuat break class-class lain yang bergantung pada class yang kita rubah tadi. Dependency Injection sendiri bukanlah sebuah design pattern yang baru, melainkan sudah banyak digunakan dalam bahasa pemrograman seperti Java. Namun di dunia PHP sendiri, DI menjadi populer karena digunakan di framework-framework PHP yang populer seperti Laravel dan Symfony. Nah, sebenarnya apakah Dependency Injection itu ? Berikut adalah definisi Dependency Injection yang ditulis di wikipedia : In software engineering, dependency injection is a technique whereby one object supplies the dependencies of another object. A dependency is an object that can be used (a service). An injection is the passing of a dependency to a dependent object (a client) that would use it. The service is made part of the client’s state.[1] Passing the service to the client, rather than allowing a client to build or find the service, is the fundamental requirement of the pattern. Jika definisi di atas masih terasa membingungkan, tidak perlu khawatir karena kita akan membahasnya dalam pembahasan yang lebih practical. Mari kita sederhanakan definisi di atas menjadi Dependency Injection adalah proses memasukkan (inject) sebuah class ke dalam class lain. Ada alasan tertentu mengapa saya menggunakan istilah memasukkan / inject bukan memanggil / call. Karena implementasi dari inject dan call akan sangat berbeda. Langsung saja kita lihat contohnya : Kita membuat sebuah class kendaraan yaitu Motorcycle.php dan Car.php. Class ini memerlukan sebuah class lain yang bernama Premium.php untuk dipanggil pada method fillUp(). Catatan : kode dibawah tidak mengimplementasikan Dependency Injection. Lalu kita membuat sebuah file baru bernama MyVehicle.php yang memanggil object berdasarkan class Motorcycle.php dan Car.php Ketika kita jalankan MyVehicle.php, maka hasilnya adalah Hmm.. sekilas tidak ada masalah dengan implementasi kode diatas. Namun masalah mulai muncul ketika kita ingin mengganti bahan bakar kendaraan kita dari Premium ke Pertamax. Dengan metode yang kita gunakan diatas, kita memanggil class Premium.php di dalam class Motorcycle.php dan Car.php. Perhatikan kode berikut : require_once('Premium.php'); ... $this->fuel = new Premium(); Jika kita ingin mengganti class Premium.php ke Pertamax.php maka kita harus mengganti satu per satu di masing-masing class yang memanggil Premium.php. Kalau class yang depend hanya 2 seperti contoh diatas tentu tidak akan menjadi masalah. tapi bagaimana kalau… [...] Baca Selengkapnya.