Apakah programmer Ruby (dan bahasa dinamis lainnya) menggunakan IoC / Dependency Injection?

8

Saya terutama seorang pengembang ASP.NET dan satu-satunya hal yang saya perkenalkan dalam beberapa tahun terakhir yang memiliki dampak paling dramatis pada kualitas kode yang saya tulis telah mempelajari cara menggunakan wadah IoC untuk mengelola dependensi di antara berbagai lapisan aplikasi secara efisien.

Saya baru-baru ini menjadikan hobi saya untuk mempelajari Ruby (dan Rails) untuk proyek-proyek pribadi, dan saya sangat menyukai bahasa ini. Namun, salah satu hal yang saya perhatikan dari berbagai tutorial dan referensi yang telah saya gunakan, adalah bahwa belum ada yang menyebutkan penggunaan IoC. Ini sangat kontras dengan .NET di mana ia berada (dan di mana tidak, harus) dimasukkan ke pengembang pada tahap awal.

Saya menghargai bahwa salah satu alasan mengapa injeksi dependensi mungkin tidak diperlukan di Ruby, adalah bahwa semua yang ada di kelas adalah publik dan virtual sehingga terbuka untuk modifikasi sehingga tidak benar-benar diperlukan untuk menulis tes unit yang baik. Tetapi tentu saja ada banyak manfaat lain untuk menggunakan wadah IOC seperti opsi decoupling yang dibawanya, mengelola pembuatan objek, dan masa pakai dll.

Apakah injeksi ketergantungan digunakan di Ruby? Jika tidak, mengapa ini tidak menjadi masalah?

richeym
sumber

Jawaban:

6

Inversion of Control masih merupakan konsep yang berlaku dengan baik. Anda tidak perlu melakukan injeksi ketergantungan untuk menerapkan IoC, meskipun dalam. NET mereka cenderung sering pergi bersama.

Drive besar di belakang injeksi dependensi dalam. NET menghindari tergantung pada implementasi konkret. Di Ruby, seperti yang Anda sebutkan, banyak hal yang lebih terbuka dan Anda dapat mengganti implementasi kelas pada saat run time, jadi ada jauh lebih sedikit kebutuhan untuk membuat "antarmuka" dan secara eksplisit menyuntikkan dependensi.

Dapat diperdebatkan bahwa antarmuka dan IoC / DI tidak sepenuhnya diperlukan dalam. lebih jelas di Ruby.

Adam Lear
sumber
4

Dependency Injection kurang penting dalam bahasa dinamis karena mereka adalah dynamic- Anda dapat mengubah kode Anda setiap kali Anda inginkan sehingga Anda tidak perlu merencanakan ke depan untuk berpotensi mengubah dependensi. Ada cara-cara yang lebih mudah untuk mencapai IoC dalam bahasa seperti Ruby.

Fabio Kung pada topik ini yang mengacu pada Jamis Buck pada hal yang sama - mereka memberikan sedikit kedalaman.

glenatron
sumber