Saya telah mencari ke dalam menggunakan kerangka Topan untuk injeksi ketergantungan minggu ini. Saya mendapatkan bahwa memisahkan konstruksi objek bermanfaat untuk mengganti komponen acak dengan mengolok-olok selama pengujian unit, dan sejauh ini saya telah melihat manfaat dari ini saja.
Tapi saya tidak bisa tidak berpikir bahwa di mana sebelumnya saya memiliki kelas pengendali tampilan humongous yang memiliki puluhan impor header, saya sekarang memiliki kelas pabrik humongous yang memiliki puluhan impor header. Apakah saya harus menghindari kelas pabrik yang besar?
dependency-injection
Pemenang
sumber
sumber
Jawaban:
Ketergantungan Injeksi hanya membantu menentukan bagaimana satu objek tahu tentang objek dependen lainnya. Ini tidak akan membantu Anda mengurangi kerumitan keseluruhan sistem. Jika Anda membutuhkan puluhan impor sebelum DI, Anda masih perlu puluhan impor setelah. Perbedaannya adalah bahwa impor ini akan berada di lokasi (kelas) yang lebih masuk akal (pabrik, pembangun, dll).
Dengan memungkinkan dependensi disediakan melalui konstruktor atau metode, Anda memberi diri Anda fleksibilitas untuk memasok objek yang berbeda, namun masih valid, ke kelas Anda dan meningkatkan kohesi kelas tersebut dengan menghilangkan kekhawatiran.
Ada beberapa prinsip yang serupa dan sering digunakan bersama: Dependency Injection (DI), Inversion of Control (IoC), dan Dependency Inversion Principle (DIP)
Dari artikel ini http://martinfowler.com/articles/dipInTheWild.html
sumber
Injeksi ketergantungan tidak mengurangi kompleksitas, tetapi meningkatkan kemampuan manitainabilitas melalui pemisahan masalah dan mengurangi kopling.
Anda seharusnya menghindari kelas "humongous", titik. Jadi katakanlah Anda membagi pengontrol tampilan ke dalam kelas yang lebih kecil dan lebih dapat dikelola. Sekarang mereka semua bertanggung jawab untuk mendapatkan ketergantungan mereka. DI membantu Anda untuk memindahkan manajemen ketergantungan ini dari semua kelas tersebut ke kelas pabrik / konfigurasi yang hanya bertanggung jawab untuk manajemen ketergantungan - lihat Prinsip Tanggung Jawab Tunggal. Dan meskipun itu pasti akan jauh lebih sedikit "humongous" daripada pengontrol tampilan asli, jika terlalu besar Anda selalu memiliki pilihan untuk membaginya menjadi kelas manajemen ketergantungan yang lebih kecil yang bertanggung jawab untuk berbagai bagian aplikasi.
sumber
Dalam kata-kata awam:
Injeksi ketergantungan memindahkan kompleksitas ke tempat yang tidak terlalu membahayakan.
EDIT untuk @gnat: DI tidak hanya memindahkan kompleksitas ke kelas yang terpisah, itu juga memindahkannya ke tempat yang menyebabkan kerugian lebih sedikit.
sumber