Saya akan mencoba mencari tahu mengapa IOC mungkin tidak baik dari sudut pandang saya.
Seperti yang lainnya, wadah IOC (atau seperti yang dikatakan Einstein, I = OC ^ 2) adalah konsep yang harus Anda putuskan sendiri apakah Anda membutuhkannya atau tidak dalam kode Anda. Teriakan mode terbaru tentang IOC hanya itu, mode. Jangan jatuh cinta pada mode, itu yang pertama. Ada banyak sekali konsep di luar sana yang bisa Anda terapkan dalam kode Anda. Pertama-tama, saya menggunakan injeksi dependensi sejak saya memulai pemrograman, dan mempelajari istilah itu sendiri ketika dipopulerkan dengan nama itu. Kontrol ketergantungan adalah subjek yang sangat tua dan telah ditangani sejauh ini dalam triliunan cara, tergantung pada apa yang dipisahkan dari apa. Memisahkan segala sesuatu dari segalanya adalah omong kosong. Masalah dengan wadah IOC adalah bahwa ia mencoba untuk menjadi sama bermanfaatnya dengan Entity Framework atau NHibernate. Sementara menulis mapper-objek relasional hanyalah suatu keharusan segera setelah Anda harus memasangkan setiap database dengan sistem Anda, wadah IOC tidak selalu diperlukan. Jadi ketika wadah IOC berguna:
- Ketika Anda memiliki situasi dengan banyak dependensi yang ingin Anda kelola
- Ketika Anda tidak peduli tentang menggabungkan kode Anda dengan produk pihak ketiga
- Saat pengembang Anda ingin mempelajari cara bekerja dengan alat baru
1: Ini tidak sering bahwa Anda memiliki begitu banyak dependensi dalam kode Anda, atau bahwa Anda menyadarinya sejak awal desain. Berpikir abstrak berguna ketika berpikir abstrak adalah karena.
2: Menggabungkan kode Anda dengan kode pihak ketiga adalah masalah HuGe. Saya bekerja dengan kode yang berumur 10+ tahun dan pada saat itu mengikuti konsep mewah dan canggih ATL, COM, COM + dan seterusnya. Tidak ada yang dapat Anda lakukan dengan kode itu sekarang. Apa yang saya katakan adalah bahwa konsep lanjutan memberikan keuntungan yang jelas, namun ini dibatalkan pada akhirnya dengan keuntungan yang sudah usang itu sendiri. Itu hanya membuat semuanya lebih mahal.
3: Pengembangan perangkat lunak cukup sulit. Anda dapat memperluasnya ke tingkat yang tidak dapat dikenali jika Anda mengizinkan beberapa konsep lanjutan untuk memotong kode Anda. Ada masalah dengan IOC2. Meskipun dependensi decoupling, itu decoupling aliran logika juga. Bayangkan Anda telah menemukan bug dan Anda perlu istirahat untuk memeriksa situasinya. IOC2, seperti konsep lanjutan lainnya, membuatnya semakin sulit. Memperbaiki bug dalam konsep lebih sulit daripada memperbaiki bug dalam kode yang lebih jelas, karena ketika Anda memperbaiki bug konsep harus dipatuhi lagi. (Hanya untuk memberi Anda contoh, C ++. NET terus-menerus mengubah sintaks sehingga Anda harus berpikir keras sebelum Anda refactor beberapa versi .NET.) Jadi, apa masalah dengan IOC? Masalahnya adalah dalam menyelesaikan dependensi. Logika untuk menyelesaikan umumnya tersembunyi di IOC2 itu sendiri, ditulis mungkin dengan cara tidak biasa yang perlu Anda pelajari dan pelihara. Apakah produk pihak ketiga Anda akan ada di sana dalam 5 tahun? Microsoft tidak.
Sindrom "Kami tahu bagaimana" ditulis di semua tempat mengenai IOC2. Ini mirip dengan pengujian otomatisasi. Istilah mewah dan solusi sempurna pada pandangan pertama, Anda cukup melakukan semua tes untuk dieksekusi pada malam hari dan melihat hasilnya di pagi hari. Sangat menyakitkan untuk menjelaskan perusahaan demi perusahaan apa arti pengujian otomatis sebenarnya. Pengujian otomatis jelas bukan cara cepat untuk mengurangi jumlah bug yang dapat Anda perkenalkan semalam untuk meningkatkan kualitas produk Anda. Tapi, fesyen membuat gagasan itu dominan dan mengganggu. IOC2 menderita sindrom yang sama. Dipercaya bahwa Anda perlu mengimplementasikannya agar perangkat lunak Anda menjadi baik. Setiap wawancara baru-baru ini saya ditanya apakah saya menerapkan IOC2 dan otomatisasi. Itu adalah tanda mode: perusahaan memiliki beberapa bagian kode yang ditulis dalam MFC yang tidak akan mereka tinggalkan.
Anda perlu mempelajari IOC2 seperti konsep lain dalam perangkat lunak. Keputusan jika IOC2 perlu digunakan ada di dalam tim dan perusahaan. Namun, setidaknya SEMUA argumen di atas harus disebutkan sebelum keputusan dibuat. Hanya jika Anda melihat sisi positifnya melebihi sisi negatifnya, Anda dapat membuat keputusan positif.
Tidak ada yang salah dengan IOC2 kecuali bahwa itu hanya menyelesaikan masalah yang dipecahkan dan memperkenalkan masalah yang diperkenalkannya. Tidak ada lagi. Namun, menentang mode sangat sulit, mereka memiliki mulut yang berkeringat, pengikut apa pun. Sungguh aneh bagaimana tidak satu pun dari mereka ada di sana ketika masalah dengan keanggunan mereka menjadi jelas. Banyak konsep dalam industri perangkat lunak telah dipertahankan karena mereka menghasilkan laba, buku ditulis, konferensi diadakan, produk baru dibuat. Itu fashion, biasanya berumur pendek. Begitu orang menemukan sesuatu yang lain, mereka meninggalkannya sepenuhnya. IOC2 berguna tetapi menunjukkan tanda-tanda yang sama seperti banyak konsep lenyap lainnya yang pernah saya lihat. Saya tidak tahu apakah itu akan bertahan. Tidak ada aturan untuk itu. Anda pikir jika itu berguna, itu akan bertahan. Tidak, tidak seperti itu. Satu perusahaan kaya besar sudah cukup dan konsepnya bisa mati dalam beberapa minggu. Kita lihat saja nanti. NHibernate selamat, EF berada di urutan kedua. Mungkin IOC2 akan bertahan juga. Jangan lupa bahwa sebagian besar konsep dalam pengembangan perangkat lunak adalah tentang tidak ada yang istimewa, mereka sangat logis, sederhana dan jelas, dan kadang-kadang lebih sulit untuk mengingat konvensi penamaan saat ini daripada memahami konsep itu sendiri. Apakah pengetahuan IOC2 membuat pengembang menjadi pengembang yang lebih baik? Tidak, karena jika pengembang tidak dapat membuat konsep yang mirip dengan IOC2 maka akan sulit baginya untuk memahami masalah yang diselesaikan oleh IOC2, menggunakannya akan terlihat buatan dan dia mungkin mulai menggunakannya demi menjadi semacam politik yang benar. Jangan lupa bahwa sebagian besar konsep dalam pengembangan perangkat lunak adalah tentang tidak ada yang istimewa, mereka sangat logis, sederhana dan jelas, dan kadang-kadang lebih sulit untuk mengingat konvensi penamaan saat ini daripada memahami konsep itu sendiri. Apakah pengetahuan IOC2 membuat pengembang menjadi pengembang yang lebih baik? Tidak, karena jika pengembang tidak dapat membuat konsep yang mirip dengan IOC2 maka akan sulit baginya untuk memahami masalah yang diselesaikan oleh IOC2, menggunakannya akan terlihat buatan dan dia mungkin mulai menggunakannya demi menjadi semacam politik yang benar. Jangan lupa bahwa sebagian besar konsep dalam pengembangan perangkat lunak adalah tentang tidak ada yang istimewa, mereka sangat logis, sederhana dan jelas, dan kadang-kadang lebih sulit untuk mengingat konvensi penamaan saat ini daripada memahami konsep itu sendiri. Apakah pengetahuan IOC2 membuat pengembang menjadi pengembang yang lebih baik? Tidak, karena jika pengembang tidak dapat membuat konsep yang mirip dengan IOC2 maka akan sulit baginya untuk memahami masalah yang diselesaikan oleh IOC2, menggunakannya akan terlihat buatan dan dia mungkin mulai menggunakannya demi menjadi semacam politik yang benar. Apakah pengetahuan IOC2 membuat pengembang menjadi pengembang yang lebih baik? Tidak, karena jika pengembang tidak dapat membuat konsep yang mirip dengan IOC2 maka akan sulit baginya untuk memahami masalah yang diselesaikan oleh IOC2, menggunakannya akan terlihat buatan dan dia mungkin mulai menggunakannya demi menjadi semacam politik yang benar. Apakah pengetahuan IOC2 membuat pengembang menjadi pengembang yang lebih baik? Tidak, karena jika pengembang tidak dapat membuat konsep yang mirip dengan IOC2 maka akan sulit baginya untuk memahami masalah yang diselesaikan oleh IOC2, menggunakannya akan terlihat buatan dan dia mungkin mulai menggunakannya demi menjadi semacam politik yang benar.