Bicara tentang Injeksi Ketergantungan
Dalam pemrograman yang berorientasi objek, masalah yang sering kita tangani adalah decoupling. Semakin rendah kopling program menunjukkan keterbacaan dan pemeliharaan program. Inversi kontrol (inversi kontrol atau IOC) adalah prinsip desain yang umum digunakan dari pemrograman berorientasi objek. Menggunakan prinsip ini kita dapat mengurangi kopling. Di antara mereka, injeksi ketergantungan adalah implementasi inversi kontrol yang paling umum digunakan.
Apa itu ketergantungan
Ketergantungan adalah fenomena umum dalam program. Misalnya, energi instal dari kelas GasEnergy digunakan dalam mobil kelas. Praktik yang biasa adalah secara eksplisit membuat contoh kelas GasEnergy di kelas mobil dan menugaskannya ke energi. Seperti yang ditunjukkan dalam kode berikut
Antarmuka Energi {} Class GasEnergy mengimplementasikan energi {} class car {energi energi = GasEnergy baru ();}Ada masalah
Mobil kelas memikul tanggung jawab yang tidak perlu dan bertanggung jawab atas penciptaan objek energi, yang pasti memiliki kopling serius. Untuk memberikan contoh yang realistis, adalah tanggung jawab mobil untuk menggunakan energi mana yang digunakan mobil tidak tergantung pada mobil, tetapi pada produsen mobil.
Skalabilitas. Dengan asumsi bahwa kami ingin memodifikasi energi menjadi tenaga listrik, maka kami harus memodifikasi kelas mobil, yang jelas tidak mematuhi prinsip penutupan terbuka.
Tidak kondusif untuk pengujian unit.
Injeksi ketergantungan
Injeksi ketergantungan adalah perilaku seperti itu. Di mobil kelas, objek GasEnergy tidak dibuat secara aktif, tetapi ketergantungan ditetapkan dengan melewatkannya dalam bentuk objek GasEnergy secara eksternal. Ada tiga metode umum injeksi ketergantungan.
Injeksi konstruktor
Lulus ketergantungan yang diperlukan sebagai parameter konstruktor untuk menyelesaikan injeksi ketergantungan.
Mobil kelas {Energy Menergy; Mobil Publik (Energi Energi) {Menergy = Energi; }}Injeksi metode setter
Tambahkan metode setter, parameter adalah ketergantungan yang perlu disuntikkan, dan injeksi ketergantungan dapat diselesaikan.
Mobil kelas {Energy Menergy; public void setEergy (energi energi) {Menergy = energi; }}Injeksi Antarmuka
Injeksi antarmuka terbukti dengan sendirinya, ini adalah untuk membuat serangkaian antarmuka untuk injeksi ketergantungan, dan ketergantungan dilewatkan sebagai parameter, dan injeksi ketergantungan ke implementasi spesifik diselesaikan dengan memanggil antarmuka terpadu.
Antarmuka EnergyConsumerInterface {public void setenergy (Energy Energy);} Class Car mengimplementasikan EnergyConsumerInterFace {Energy Menergy; public void setEergy (energi energi) {Menergy = energi; }}Injeksi antarmuka mirip dengan injeksi metode setter, perbedaannya adalah bahwa injeksi antarmuka menggunakan metode terpadu untuk menyelesaikan injeksi, sedangkan nama metode injeksi metode setter relatif santai.
Kerangka kerja trade-off
Ada banyak kerangka kerja untuk injeksi ketergantungan, yang paling terkenal adalah Guice. Tentu saja, Spring juga mendukung injeksi ketergantungan. Guice menggunakan anotasi membaca runtime, menghasilkan dependensi dan menyuntikkannya melalui refleksi. Formulir ini tidak terlalu cocok untuk perangkat seluler Android. Bagaimanapun, operasi ini diproses saat runtime dan memiliki persyaratan kinerja tinggi.
Dagger adalah perpustakaan injeksi ketergantungan yang cocok untuk pengembangan android. Ini juga menggunakan bentuk anotasi kelas. Perbedaannya adalah menghasilkan kelas tambahan pada waktu kompilasi dan menunggu sampai kelas tambahan yang dihasilkan digunakan untuk menyelesaikan injeksi ketergantungan saat runtime.
Gunakan atau tidak
Bahkan, apakah akan menggunakan atau tidak menggunakan kerangka kerja adalah masalah. Jika Anda menggunakan kerangka kerja, semua orang dalam tim diharuskan mengikuti instruksi untuk menulis kode untuk menyelesaikan injeksi ketergantungan. Kerangka kerja ini tidak mudah untuk memulai, dan koefisien pembelajaran relatif kompleks dan sulit dikuasai, yang juga merupakan masalah yang perlu dipertimbangkan.
Pendapat pribadi saya adalah bahwa kami tidak merekomendasikan atau menentang penggunaan kerangka kerja ini, tetapi saya merasa bahwa kadang -kadang kami berharap untuk kerangka kerja, jadi lebih baik memperhatikan masalah ini dalam kehidupan sehari -hari kami. Bukankah penghindaran buatan juga merupakan persyaratan dasar bagi diri kita sendiri?
Pencarian ketergantungan
Pencarian ketergantungan adalah implementasi spesifik dari prinsip inversi kontrol, tidak seperti penerimaan pasif dari injeksi ketergantungan, pencarian ketergantungan adalah permintaan aktif. Saat dibutuhkan, objek diperoleh dengan memanggil metode yang disediakan oleh kerangka kerja. Saat memperoleh, jalur file konfigurasi yang relevan, kunci dan informasi lainnya diperlukan untuk menentukan keadaan objek yang diperoleh.
Di atas adalah pengantar terperinci tentang informasi tentang injeksi ketergantungan. Kami akan terus menambahkan informasi yang relevan di masa mendatang. Terima kasih atas dukungan Anda untuk situs ini!