it-swarm-id.com

Apa manfaat menggunakan Dependency Injection dan IoC Containers?

Saya berencana untuk berbicara tentang Dependency Injection dan IoC Containers, dan saya sedang mencari beberapa argumen yang bagus untuk menggunakannya.

Apa manfaat paling penting dari penggunaan teknik ini, dan alat-alat ini?

67
Andy Lowry

Yang paling penting, bagi saya, membuatnya mudah untuk mengikuti Prinsip Tanggung Jawab Tunggal .

DI/IoC membuatnya mudah bagi saya untuk mengelola dependensi antar objek. Pada gilirannya, itu membuatnya lebih mudah bagi saya untuk memecah fungsionalitas yang koheren ke dalam kontrak sendiri (antarmuka) Akibatnya, kode saya jauh lebih termodulasi sejak saya mengetahui DI/IoC.

Hasil lain dari ini adalah bahwa saya dapat lebih mudah melihat jalan saya ke desain yang mendukung Prinsip Terbuka-Tertutup . Ini adalah salah satu teknik yang paling menginspirasi kepercayaan diri (hanya setelah pengujian otomatis). Saya ragu saya bisa mendukung nilai-nilai dari Prinsip Terbuka-Tertutup.

DI/IoC adalah salah satu dari beberapa hal dalam karier pemrograman saya yang telah menjadi "pengubah permainan". Ada besar kesenjangan kualitas antara kode yang saya tulis sebelum & setelah belajar DI/IoC. Biarkan saya tekankan lagi. [~ # ~] peningkatan besar [~ # ~] dalam kualitas kode.

48
quentin-starin

Contoh-contoh yang benar-benar membuka mata saya adalah melihat bagaimana hal itu memungkinkan untuk dengan mudah menguji benda yang dibuat sedemikian rupa. Sebelum itu, saya kesulitan mencoba mengisolasi objek untuk pengujian unit. Saya sering menulis tes untuk berinteraksi dengan sistem yang jauh lebih besar. Ini sangat sulit karena sistem secara keseluruhan jauh lebih mudah diprediksi dan jauh lebih rentan untuk berubah daripada komponen individu.

9
Winston Ewert

Keuntungan dari suntikan ketergantungan adalah:

  1. Kode Anda bersih dan lebih mudah dibaca.
  2. Kode digabungkan secara longgar.
  3. Lebih dapat digunakan kembali karena implementasinya dikonfigurasikan dalam file XML, itu dapat digunakan dalam konteks yang berbeda.
  4. Kode dapat dengan mudah diuji dengan implementasi tiruan yang berbeda.
4
Solaimani SA

Saya pikir manfaat sebenarnya lebih politis daripada teknis. DI hanyalah alternatif dari pola Service Locator, tidak lebih. Dengan sendirinya, itu tidak membuatnya lebih mudah untuk mengikuti prinsip-prinsip seperti SRP atau OCP, atau untuk memisahkan lapisan. Responden lain di sini membingungkan konsep dan teknik yang berbeda, IMO.

Anda dapat mencapai tujuan yang sama sehubungan dengan kohesi tinggi dan kopling rendah dengan menggunakan Layanan Locators, atau dengan hanya instantiating dependensi secara langsung kapan pun berlaku (yang sebagian besar waktu).

Sekarang, saya tahu banyak yang akan tidak setuju dengan pendapat ini. Saya akan senang mendiskusikan contoh-contoh konkret.

2
Rogério