Penjelasan yang Sangat Baik tentang Injeksi Ketergantungan (Pembalikan Kontrol)

Saya telah membaca banyak penjelasan tentang Dependency Injection atau DI (sebelumnya dikenal sebagai Inversion of Control) dan Prinsip Hollywood yang terkait ("Jangan hubungi kami, kami akan menelepon Anda."). Mereka semua cenderung tidak jelas, baik karena mereka mempelajari penjelasan yang sangat rinci, atau mereka mengikat penjelasan tersebut secara khusus pada satu teknologi tertentu. Sehingga polanya hilang atau kesederhanaannya. Berikut adalah penjelasan paling jelas yang saya temukan - sedikit diedit untuk singkatnya (dari Spring in Action, 2nd. Ed. By Craig Walls):

"Setiap aplikasi nontrivial terdiri dari dua atau lebih kelas yang berkolaborasi satu sama lain untuk melakukan beberapa logika bisnis. Secara tradisional, setiap objek bertanggung jawab untuk mendapatkan referensi sendiri ke objek yang berkolaborasi dengannya (dependensinya). Saat menerapkan DI, objek diberi dependensi pada waktu pembuatan oleh beberapa entitas eksternal yang mengoordinasikan setiap objek dalam sistem. Dengan kata lain, dependensi dimasukkan ke dalam objek. "

Saya merasa itu sangat jelas.

Dependency Injection awalnya disebut Inversion of Control (IoC) karena urutan kontrol normal adalah objek menemukan objek yang bergantung padanya dan kemudian memanggilnya. Di sini, ini dibalik: Dependensi diserahkan ke objek saat dibuat. Ini juga menggambarkan Prinsip Hollywood di tempat kerja: Jangan meminta ketergantungan Anda, kami akan memberikannya kepada Anda saat kami membutuhkan Anda.

Jika Anda tidak menggunakan DI, Anda mungkin bertanya-tanya mengapa itu masalah besar. Ini memberikan keuntungan utama: kopling longgar. Objek dapat ditambahkan dan diuji secara independen dari objek lain, karena tidak bergantung pada apa pun selain yang Anda berikan. Saat menggunakan dependensi tradisional, untuk menguji objek Anda harus membuat lingkungan tempat semua dependensinya ada dan dapat dijangkau sebelum Anda dapat mengujinya. Dengan DI, dimungkinkan untuk menguji objek secara terpisah dengan meneruskan objek tiruan untuk objek yang tidak Anda inginkan atau perlu buat. Demikian pula, menambahkan kelas ke proyek difasilitasi karena kelas itu berdiri sendiri, jadi ini menghindari "bola rambut besar" yang sering kali berkembang menjadi proyek besar.

Tantangan DI adalah menulis seluruh aplikasi yang menggunakannya. Beberapa kelas bukanlah masalah besar, tetapi keseluruhan aplikasi jauh lebih sulit. Untuk seluruh aplikasi, Anda sering menginginkan kerangka kerja untuk mengelola ketergantungan dan interaksi antar objek. Kerangka DI sering didorong oleh file XML yang membantu menentukan apa yang harus diteruskan kepada siapa dan kapan. Spring adalah framework Java DI dengan layanan lengkap; Kerangka DI yang lebih ringan lainnya termasuk NanoContainer dan PicoContainer yang bahkan lebih ringan.

Sebagian besar kerangka kerja ini memiliki tutorial yang bagus untuk membantu pemula menemukan jalannya.

Artikel ini, "Penjelasan yang Sangat Baik dari Injeksi Ketergantungan (Pembalikan Kontrol)" pada awalnya diterbitkan oleh JavaWorld.