Penjelasan Hebat Suntikan Ketergantungan (Pembalikan Kawalan)

Saya telah membaca banyak penjelasan mengenai Dependency Injection atau DI (sebelumnya dikenali sebagai Inversion of Control) dan Prinsip Hollywood yang berkaitan ("Jangan panggil kami, kami akan menghubungi anda."). Semuanya cenderung tidak jelas, baik kerana mereka segera menerangkan penjelasan yang sangat terperinci, atau mereka mengaitkan penjelasan tersebut secara khusus dengan satu teknologi tertentu. Sehingga coraknya hilang atau kesederhanaannya. Berikut adalah penjelasan paling jelas yang saya dapati - sedikit diedit untuk singkat (dari Spring in Action yang sangat baik, Edisi ke-2 oleh Craig Walls):

"Sebarang aplikasi tidak biasa terdiri dari dua atau lebih kelas yang berkolaborasi antara satu sama lain untuk melakukan beberapa logik perniagaan. Secara tradisinya, setiap objek bertanggungjawab untuk mendapatkan rujukannya sendiri terhadap objek yang dikolaborasikannya (kebergantungannya). Semasa menggunakan DI, objek diberi kebergantungannya pada waktu penciptaan oleh beberapa entiti luaran yang mengkoordinasikan setiap objek dalam sistem. Dengan kata lain, kebergantungan disuntikkan ke objek. "

Saya dapati itu sangat jelas.

Dependency Injection pada awalnya disebut Inversion of Control (IoC) kerana urutan kawalan normal akan menjadi objek yang menemukan objek yang bergantung pada dirinya sendiri dan kemudian memanggilnya. Di sini, ini diterbalikkan: Pergantungan diserahkan kepada objek ketika dibuat. Ini juga menggambarkan Prinsip Hollywood di tempat kerja: Jangan hubungi pergantungan anda, kami akan memberikannya kepada anda apabila kami memerlukan anda.

Sekiranya anda tidak menggunakan DI, anda mungkin tertanya-tanya mengapa ia menjadi masalah besar. Ini memberikan kelebihan utama: gandingan longgar. Objek dapat ditambahkan dan diuji secara bebas dari objek lain, kerana objek tersebut tidak bergantung pada apa pun selain yang anda lalui. Semasa menggunakan kebergantungan tradisional, untuk menguji objek, anda harus membuat persekitaran di mana semua kebergantungannya ada dan dapat dicapai sebelum anda dapat mengujinya. Dengan DI, mungkin untuk menguji objek secara berasingan melewati objek tiruan untuk yang tidak anda mahu atau perlu buat. Begitu juga, menambahkan kelas ke dalam projek difasilitasi kerana kelas itu serba lengkap, jadi ini mengelakkan "bola rambut besar" yang sering berkembang menjadi projek besar.

Cabaran DI adalah menulis keseluruhan aplikasi yang menggunakannya. Beberapa kelas bukan masalah besar, tetapi keseluruhan aplikasi jauh lebih sukar. Untuk keseluruhan aplikasi, anda sering memerlukan kerangka kerja untuk menguruskan pergantungan dan interaksi antara objek. Kerangka DI sering didorong oleh fail XML yang membantu menentukan apa yang harus dihantar kepada siapa dan kapan. Spring adalah kerangka Java DI perkhidmatan penuh; kerangka DI lain yang lebih ringan termasuk NanoContainer dan PicoContainer yang lebih ringan.

Sebilangan besar kerangka kerja ini mempunyai tutorial yang baik untuk membantu pemula mencari jalan.

Kisah ini, "Penjelasan Cemerlang Dependensi Injection (Inversion of Control)" pada mulanya diterbitkan oleh JavaWorld.