Definisi
Inversion of control adalah paradigma desain dengan tujuan mengurangi kesadaran implementasi konkret dari kode kerangka kerja aplikasi dan memberikan lebih banyak kontrol ke komponen domain spesifik aplikasi Anda. Dalam sistem yang dirancang top down tradisional, aliran logis aplikasi dan kesadaran ketergantungan mengalir dari komponen atas, komponen yang dirancang terlebih dahulu, ke komponen yang dirancang terakhir. Dengan demikian, inversi kontrol adalah pembalikan hampir literal dari kontrol dan kesadaran ketergantungan dalam suatu aplikasi.
Ketergantungan injeksi adalah pola yang digunakan untuk membuat instance kelas yang bergantung pada kelas lain tanpa mengetahui pada waktu kompilasi implementasi yang akan digunakan untuk menyediakan fungsionalitas itu.
Bekerja bersama
Inversi kontrol dapat memanfaatkan injeksi ketergantungan karena diperlukan mekanisme untuk membuat komponen yang menyediakan fungsi spesifik. Pilihan lain ada dan digunakan, misalnya aktivator, metode pabrik, dll., Tetapi kerangka kerja tidak perlu merujuk kelas-kelas utilitas ketika kelas kerangka kerja dapat menerima ketergantungan yang mereka butuhkan.
Contohnya
Salah satu contoh konsep-konsep ini di tempat kerja adalah kerangka plug-in di Reflector . Plug-in memiliki banyak kontrol terhadap sistem walaupun aplikasi tidak tahu apa-apa tentang plug-in pada waktu kompilasi. Metode tunggal dipanggil pada masing-masing plug-in tersebut, Inisialisasi jika memori berfungsi, yang meneruskan kontrol ke plug-in. Kerangka kerja tidak tahu apa yang akan mereka lakukan, itu hanya memungkinkan mereka melakukannya. Kontrol telah diambil dari aplikasi utama dan diberikan kepada komponen yang melakukan pekerjaan tertentu; inversi kontrol.
Kerangka kerja aplikasi memungkinkan akses ke fungsinya melalui berbagai penyedia layanan. Sebuah plug-in diberikan referensi ke penyedia layanan ketika itu dibuat. Ketergantungan ini memungkinkan plug-in untuk menambahkan item menu sendiri, mengubah cara file ditampilkan, menampilkan informasi sendiri di panel yang sesuai, dll. Karena dependensi dilewatkan oleh antarmuka, implementasinya dapat berubah dan perubahan tidak akan merusak kode selama kontrak tetap utuh.
Pada saat itu, metode pabrik digunakan untuk membuat plug-in menggunakan informasi konfigurasi, refleksi dan objek Activator (setidaknya dalam. NET). Saat ini, ada alat, MEF untuk satu, yang memungkinkan untuk berbagai pilihan ketika menyuntikkan dependensi termasuk kemampuan kerangka kerja aplikasi untuk menerima daftar plugin sebagai dependensi.
Ringkasan
Sementara konsep-konsep ini dapat digunakan dan memberikan manfaat secara mandiri, bersama-sama mereka memungkinkan penulisan kode yang lebih fleksibel, dapat digunakan kembali, dan dapat diuji. Dengan demikian, mereka adalah konsep penting dalam merancang solusi berorientasi objek.