Pengenalan singkat tentang Injeksi Ketergantungan: apa itu, dan kapan menggunakannya

pengantar

Dalam rekayasa perangkat lunak, injeksi ketergantungan adalah teknik di mana satu objek (atau metode statis) memasok ketergantungan objek lain. Ketergantungan adalah objek yang dapat digunakan (layanan).

Itu definisi Wikipedia tapi tetap saja, tapi itu tidak terlalu mudah untuk dipahami. Jadi mari kita pahami lebih baik.

Sebelum memahami apa artinya dalam pemrograman, pertama-tama mari kita lihat apa artinya secara umum karena ini akan membantu kita memahami konsep dengan lebih baik.

Ketergantungan atau ketergantungan berarti mengandalkan sesuatu untuk mendapatkan dukungan. Seperti jika saya katakan kita terlalu mengandalkan ponsel daripada itu berarti kita bergantung padanya.

Jadi sebelum masuk ke injeksi ketergantungan , pertama-tama mari kita pahami apa arti ketergantungan dalam pemrograman.

Ketika kelas A menggunakan beberapa fungsionalitas kelas B, maka dikatakan bahwa kelas A memiliki ketergantungan kelas B.

Di Java, sebelum kita dapat menggunakan metode kelas lain, pertama-tama kita perlu membuat objek kelas itu (yaitu kelas A perlu membuat turunan kelas B).

Jadi, mentransfer tugas membuat objek ke orang lain dan secara langsung menggunakan dependensi disebut injeksi ketergantungan.

Mengapa saya harus menggunakan injeksi ketergantungan?

Misalkan kita memiliki kelas mobil yang berisi berbagai objek seperti roda, mesin, dll.

Di sini kelas mobil bertanggung jawab untuk membuat semua objek ketergantungan. Sekarang, bagaimana jika kita memutuskan untuk membuang MRFWheels di masa depan dan ingin menggunakan Roda Yokohama ?

Kita perlu membuat ulang objek mobil dengan ketergantungan Yokohama yang baru. Namun saat menggunakan injeksi ketergantungan (DI), kita dapat mengubah Roda saat runtime (karena dependensi dapat diinjeksikan pada waktu proses daripada pada waktu kompilasi).

Anda dapat menganggap DI sebagai perantara dalam kode kami yang melakukan semua pekerjaan untuk membuat objek roda yang disukai dan menyediakannya ke kelas Mobil.

Itu membuat kelas Mobil kami tidak bergantung pada pembuatan objek Roda, Baterai, dll.

Pada dasarnya ada tiga jenis injeksi ketergantungan:

  1. injeksi konstruktor: dependensi disediakan melalui konstruktor kelas.
  2. injeksi penyetel: klien mengekspos metode penyetel yang digunakan injektor untuk menyuntikkan ketergantungan.
  3. injeksi antarmuka: ketergantungan menyediakan metode injektor yang akan menyuntikkan ketergantungan ke klien mana pun yang diteruskan kepadanya. Klien harus mengimplementasikan antarmuka yang mengekspos metode penyetel yang menerima ketergantungan.

Jadi sekarang tanggung jawab injeksi ketergantungan untuk:

  1. Buat objeknya
  2. Ketahui kelas mana yang membutuhkan objek tersebut
  3. Dan berikan mereka semua benda itu

Jika ada perubahan pada objek, maka DI melihat ke dalamnya dan seharusnya tidak menyangkut kelas yang menggunakan objek tersebut. Dengan cara ini jika objek berubah di masa depan, maka DI bertanggung jawab untuk menyediakan objek yang sesuai untuk kelas.

Inversion of control — konsep di balik DI

Ini menyatakan bahwa sebuah kelas tidak boleh mengkonfigurasi dependensinya secara statis tetapi harus dikonfigurasi oleh kelas lain dari luar.

Ini adalah prinsip kelima SOLID - thelima prinsip dasar pemrograman dan desain berorientasi objek oleh Paman Bob - yang menyatakan bahwa kelas harus bergantung pada abstraksi dan bukan pada konkresi (dalam istilah sederhana, hard-code).

Menurut prinsip-prinsip tersebut, kelas harus berkonsentrasi pada pemenuhan tanggung jawabnya dan bukan pada menciptakan objek yang dibutuhkan untuk memenuhi tanggung jawab tersebut. Dan di situlah injeksi ketergantungan berperan: ini menyediakan kelas dengan objek yang diperlukan.

Catatan: Jika Anda ingin mempelajari prinsip-prinsip SOLID oleh Paman Bob, Anda dapat mengunjungi tautan ini.

Manfaat menggunakan DI

  1. Membantu dalam pengujian Unit.
  2. Kode pelat boiler berkurang, karena inisialisasi dependensi dilakukan oleh komponen injektor.
  3. Memperluas aplikasi menjadi lebih mudah.
  4. Membantu mengaktifkan sambungan longgar, yang penting dalam pemrograman aplikasi.

Kekurangan DI

  1. Agak rumit untuk dipelajari, dan jika digunakan secara berlebihan dapat menyebabkan masalah manajemen dan masalah lainnya.
  2. Banyak kesalahan waktu kompilasi didorong ke waktu proses.
  3. Kerangka kerja injeksi ketergantungan diimplementasikan dengan refleksi atau pemrograman dinamis. Hal ini dapat menghalangi penggunaan otomatisasi IDE, seperti "temukan referensi", "tampilkan hierarki panggilan", dan pemfaktoran ulang yang aman.

Anda dapat mengimplementasikan injeksi dependensi sendiri (Pure Vanilla) atau menggunakan library atau framework pihak ketiga.

Perpustakaan dan Kerangka yang menerapkan DI

  • Musim Semi (Jawa)
  • Google Guice (Java)
  • Dagger (Java dan Android)
  • Castle Windsor (.NET)
  • Unity (.NET)

Untuk mempelajari lebih lanjut tentang injeksi ketergantungan, Anda dapat melihat sumber daya di bawah ini:

Java Dependency Injection - Tutorial Contoh Pola Desain DI - JournalDev

Menggunakan injeksi ketergantungan di Java - Pendahuluan - Tutorial - Vogella

Pembalikan Kontainer Kontrol dan pola Injeksi Ketergantungan - Martin Fowler

Semoga membantu!

Jika Anda menyukai artikel tersebut dan ingin membaca artikel yang lebih menakjubkan, ikuti saya di sini (Bhavya Karia) dan tunjukkan dukungan Anda karena itu memotivasi saya untuk menulis lebih banyak.

Jika Anda memiliki pertanyaan atau umpan balik untuk saya, mari terhubung di LinkedIn, Twitter, Facebook.

Edit 1:

Terima kasih kepada Sergey Ufocoder, sekarang artikel ini telah diubah ke dalam bahasa Rusia. Teman-teman Rusia saya dan siapa saja yang bisa membaca bahasa Rusia juga membacanya.

Tautan ke artikel

Juga, jika Anda ingin menerapkan DI dalam JavaScript dan mencari perpustakaan, maka Jo Surikat menyarankan agar Anda mencoba perpustakaannya.

Di-Ninja

Satu lagi perpustakaan DI yang mengagumkan dalam JavaScript disarankan oleh Nicolas Froidure.

pisau lipat

Edit 2:

Jika Anda seorang pengembang PHP maka jangan khawatir, Anda juga akan mendapatkan semuanya. Gordon Forsythe merekomendasikan perpustakaan luar biasa ini yang mungkin ingin Anda coba.

auryn

Terima kasih atas semua kata baik yang telah saya terima. Bagikan artikelnya agar semakin banyak orang yang mendapatkan manfaat.

Jika Anda mempelajari satu atau dua hal, silakan bagikan cerita ini!