Pengenalan
Dalam kejuruteraan perisian, suntikan ketergantungan adalah teknik di mana satu objek (atau kaedah statik) menyediakan kebergantungan objek lain. Ketergantungan adalah objek yang boleh digunakan (perkhidmatan).Itulah definisi Wikipedia tetapi masih, tetapi tidak begitu mudah difahami. Oleh itu mari kita fahami dengan lebih baik.
Sebelum memahami maksudnya dalam pengaturcaraan, mari kita lihat terlebih dahulu apa maksudnya secara umum kerana ia akan membantu kita memahami konsep dengan lebih baik.
Ketergantungan atau bergantung bermaksud bergantung pada sesuatu untuk mendapatkan sokongan. Seperti jika saya katakan bahawa kita terlalu bergantung pada telefon bimbit daripada yang bermaksud kita bergantung pada mereka.
Oleh itu, sebelum mendapatkan suntikan kebergantungan , pertama-tama mari kita fahami apa maksud ketergantungan dalam pengaturcaraan.
Apabila kelas A menggunakan beberapa fungsi kelas B, maka dikatakan bahawa kelas A mempunyai kebergantungan kelas B.

Di Jawa, sebelum kita dapat menggunakan kaedah kelas lain, pertama kita harus membuat objek kelas itu (iaitu kelas A perlu membuat contoh kelas B).
Jadi, memindahkan tugas membuat objek kepada orang lain dan secara langsung menggunakan kebergantungan disebut dependency injection.

Mengapa saya mesti menggunakan suntikan kebergantungan?
Katakan kita mempunyai kelas kereta yang mengandungi pelbagai objek seperti roda, mesin, dll.
Di sini kelas kereta bertanggungjawab untuk membuat semua objek pergantungan. Sekarang, bagaimana jika kita memutuskan untuk membuang MRFWheels pada masa akan datang dan ingin menggunakan Yokohama Wheels?
Kita perlu membuat semula objek kereta dengan kebergantungan Yokohama baru. Tetapi ketika menggunakan dependency injection (DI), kita dapat mengubah Wheels pada waktu runtime (kerana dependensi dapat disuntik pada runtime dan bukan pada waktu kompilasi).
Anda boleh menganggap DI sebagai orang tengah dalam kod kami yang melakukan semua kerja membuat objek roda pilihan dan memberikannya ke kelas Kereta.
Ini menjadikan kelas Kereta kita bebas daripada membuat objek Roda, Bateri, dll.
Pada dasarnya terdapat tiga jenis suntikan kebergantungan:
- suntikan konstruktor: kebergantungan diberikan melalui pembina kelas.
- suntikan setter: klien mendedahkan kaedah setter yang digunakan penyuntik untuk menyuntik kebergantungan.
- suntikan antara muka: kebergantungan menyediakan kaedah penyuntik yang akan menyuntik kebergantungan ke mana-mana pelanggan yang dilaluinya. Pelanggan mesti melaksanakan antara muka yang memperlihatkan kaedah setter yang menerima kebergantungan.
Jadi sekarang adalah tanggungjawab suntikan kebergantungan untuk:
- Buat objek
- Ketahui kelas mana yang memerlukan objek tersebut
- Dan berikan semua benda itu kepada mereka
Sekiranya terdapat perubahan pada objek, maka DI melihat ke dalamnya dan itu tidak seharusnya melibatkan kelas yang menggunakan objek tersebut. Dengan cara ini jika objek berubah pada masa akan datang, maka tanggungjawab DI adalah untuk memberikan objek yang sesuai kepada kelas.
Pembalikan kawalan - konsep di sebalik DI
Ini menyatakan bahawa kelas tidak boleh mengkonfigurasi kebergantungannya secara statik tetapi harus dikonfigurasi oleh beberapa kelas lain dari luar.
Ini adalah prinsip kelima SOLID - thelima prinsip asas pengaturcaraan dan reka bentuk berorientasikan objek oleh Uncle Bob - yang menyatakan bahawa kelas harus bergantung pada pengabstrakan dan bukan pada konkrit (dalam istilah mudah, berkod keras).
Mengikut prinsip, kelas harus menumpukan perhatian pada memenuhi tanggungjawabnya dan bukan pada mencipta objek yang diperlukannya untuk memenuhi tanggungjawab tersebut. Dan di situlah suntikan ketergantungan dimainkan: ia menyediakan kelas dengan objek yang diperlukan.
Catatan: Sekiranya anda ingin mengetahui tentang prinsip SOLID oleh Uncle Bob, anda boleh pergi ke pautan ini.
Faedah menggunakan DI
- Membantu dalam ujian Unit.
- Kod plat dandang dikurangkan, kerana permulaan kebergantungan dilakukan oleh komponen penyuntik.
- Memanjangkan aplikasi menjadi lebih mudah.
- Membantu membolehkan gandingan longgar, yang penting dalam pengaturcaraan aplikasi.
Kekurangan DI
- Agak rumit untuk dipelajari, dan jika berlebihan boleh menyebabkan masalah pengurusan dan masalah lain.
- Banyak kesalahan masa kompilasi didorong ke waktu berjalan.
- Kerangka suntikan ketergantungan dilaksanakan dengan refleksi atau pengaturcaraan dinamik. Ini dapat menghalangi penggunaan automasi IDE, seperti "cari rujukan", "tunjukkan hierarki panggilan" dan refactoring yang selamat.
Anda boleh melaksanakan suntikan kebergantungan sendiri (Pure Vanilla) atau menggunakan perpustakaan atau kerangka kerja pihak ketiga.
Perpustakaan dan Kerangka Kerja yang melaksanakan DI
- Musim bunga (Jawa)
- Google Guice (Java)
- Belati (Java dan Android)
- Istana Windsor (.NET)
- Perpaduan (.NET)
Untuk mengetahui lebih lanjut mengenai suntikan kebergantungan, anda boleh melihat sumber berikut:
Java Dependency Injection - Tutorial Contoh Corak Reka Bentuk DI - JournalDev
Menggunakan suntikan kebergantungan di Java - Pengenalan - Tutorial - Vogella
Pembalikan Kontainer Kawalan dan corak Suntikan Ketergantungan - Martin Fowler
Semoga ia membantu!
Sekiranya anda menyukai artikel tersebut dan ingin membaca artikel yang lebih menakjubkan, ikuti saya di sini (Bhavya Karia) dan tunjukkan sokongan anda kerana ini mendorong saya untuk menulis lebih banyak lagi.
Sekiranya anda mempunyai pertanyaan atau maklum balas untuk saya daripada mari kita berhubung di LinkedIn, Twitter, Facebook.
Edit 1:
Terima kasih kepada Sergey Ufocoder sekarang artikel ini telah ditukar menjadi bahasa Rusia. Rakan-rakan saya Rusia dan semua yang dapat membaca bahasa Rusia membacanya.
Pautan ke artikel
Juga, jika anda ingin menggunakan DI dalam JavaScript dan mencari perpustakaan maka Jo Surikat menyarankan agar anda mencuba perpustakaannya.
Di-Ninja
Satu perpustakaan DI yang lebih hebat dalam JavaScript dicadangkan oleh Nicolas Froidure.
kitaran pisau
Edit 2:
Sekiranya anda seorang pembangun PHP maka jangan risau, buat anda semua juga dilindungi. Gordon Forsythe mengesyorkan perpustakaan yang menakjubkan ini yang mungkin anda ingin mencuba.
auryn
Terima kasih atas semua kata-kata baik yang saya terima. Kongsikan artikel itu agar lebih banyak orang mendapat manfaat.
Sekiranya anda mengetahui satu atau dua perkara, sila kongsi kisah ini!