Tim yang saya tangani membuat komponen yang dapat digunakan oleh mitra perusahaan untuk berintegrasi dengan platform kami.
Karena itu, saya setuju bahwa kita harus sangat berhati-hati ketika memperkenalkan dependensi (pihak ketiga). Saat ini kami tidak memiliki dependensi pihak ketiga dan kami harus tetap pada level API terendah dari framework.
Beberapa contoh:
- Kami dipaksa untuk tetap berada pada level API terendah dari framework (.NET Standard). Alasan di balik ini adalah bahwa suatu hari platform baru bisa tiba yang hanya mendukung tingkat API yang sangat rendah.
- Kami telah mengimplementasikan komponen kami sendiri untuk (menonaktifkan) serialisasi JSON dan sedang dalam proses melakukan hal yang sama untuk JWT. Ini tersedia di tingkat yang lebih tinggi dari kerangka API.
- Kami telah menerapkan pembungkus di sekitar kerangka HTTP dari pustaka standar, karena kami tidak ingin bergantung pada implementasi HTTP dari pustaka standar.
- Semua kode untuk pemetaan ke / dari XML ditulis "dengan tangan", sekali lagi untuk alasan yang sama.
Saya merasa kami mengambilnya terlalu jauh. Saya ingin tahu bagaimana menghadapi ini karena ini saya pikir ini sangat mempengaruhi kecepatan kami.
Jawaban:
Ini bagi saya menyoroti fakta bahwa, tidak hanya Anda berpotensi membatasi diri terlalu banyak, Anda juga mungkin menuju kejatuhan yang buruk dengan pendekatan Anda.
.NET Standard bukan, dan tidak akan pernah menjadi " level API terendah dari kerangka kerja ". Set API yang paling ketat untuk .NET dicapai dengan membuat perpustakaan kelas portabel yang menargetkan Windows Phone dan Silverlight.
Bergantung pada versi .NET Standard yang Anda targetkan, Anda dapat berakhir dengan serangkaian API yang sangat kaya yang kompatibel dengan .NET Framework, .NET Core , Mono , dan Xamarin . Dan ada banyak pustaka pihak ketiga yang kompatibel .NET Standard yang akan bekerja pada semua platform ini.
Lalu ada .NET Standard 2.1, kemungkinan akan dirilis pada musim gugur 2019. Ini akan didukung oleh .NET Core, Mono dan Xamarin. Ini tidak akan didukung oleh versi .NET Framework , setidaknya untuk masa mendatang, dan kemungkinan besar selalu. Jadi dalam waktu dekat, jauh dari " level API terendah dari kerangka kerja ", .NET Standard akan menggantikan kerangka kerja dan memiliki API yang tidak didukung oleh yang terakhir.
Jadi berhati-hatilah dengan " Alasan di balik ini adalah bahwa suatu hari nanti platform baru dapat datang yang hanya mendukung level API yang sangat rendah " karena sangat mungkin bahwa platform baru pada kenyataannya akan mendukung API level yang lebih tinggi daripada kerangka lama.
Lalu ada masalah perpustakaan pihak ketiga. JSON.NET misalnya kompatibel dengan .NET Standard. Pustaka apa pun yang kompatibel dengan .NET Standard dijamin - bijaksana API - untuk bekerja dengan semua implementasi .NET yang kompatibel dengan versi .NET Standard. Jadi Anda tidak mencapai kompatibilitas tambahan dengan tidak menggunakannya dan membuat perpustakaan JSON Anda. Anda hanya menciptakan lebih banyak pekerjaan untuk diri Anda sendiri dan mengeluarkan biaya yang tidak perlu untuk perusahaan Anda.
Jadi ya, Anda pasti terlalu jauh dalam pandangan saya.
sumber
eval
pembungkus kecil dengan beberapa cek kewarasan yang mudah dilewati?Alasan di sini agak terbelakang. Tingkat API yang lebih tua dan lebih rendah cenderung menjadi usang dan tidak didukung daripada yang lebih baru. Meskipun saya setuju bahwa tetap dengan cara yang nyaman di belakang "ujung tombak" masuk akal untuk memastikan tingkat kompatibilitas yang wajar dalam skenario yang Anda sebutkan, tidak pernah bergerak maju adalah hal yang luar biasa.
Ini kegilaan . Bahkan jika Anda tidak ingin menggunakan fungsi pustaka standar untuk alasan apa pun, pustaka sumber terbuka ada dengan lisensi yang kompatibel secara komersial yang melakukan semua hal di atas. Mereka sudah ditulis, diuji secara luas dari sudut pandang fungsionalitas, keamanan dan desain API, dan digunakan secara luas di banyak proyek lainnya.
Jika yang terburuk terjadi dan proyek itu hilang, atau berhenti dipertahankan, maka Anda tetap memiliki kode untuk membangun perpustakaan, dan Anda menugaskan seseorang untuk memeliharanya. Dan Anda kemungkinan masih dalam posisi yang jauh lebih baik daripada jika Anda menggulirkan sendiri, karena pada kenyataannya Anda akan memiliki kode yang lebih teruji, lebih bersih, dan lebih dapat dikelola.
Dalam skenario yang jauh lebih mungkin bahwa proyek dikelola, dan bug atau exploit ditemukan di perpustakaan itu, Anda akan tahu tentang mereka sehingga dapat melakukan sesuatu tentang hal itu - seperti memutakhirkan ke versi yang lebih baru secara gratis, atau menambal versi Anda dengan perbaikan jika Anda telah mengambil salinan.
sumber
Secara keseluruhan, hal-hal ini baik untuk pelanggan Anda. Bahkan perpustakaan open source yang populer mungkin mustahil bagi mereka untuk menggunakan karena suatu alasan.
Misalnya, mereka mungkin telah menandatangani kontrak dengan pelanggan mereka yang berjanji untuk tidak menggunakan produk-produk sumber terbuka.
Namun, seperti yang Anda tunjukkan, fitur-fitur ini bukan tanpa biaya.
Saya akan meningkatkan kelemahan ini dan berbicara dengan pelanggan untuk mencari tahu apakah mereka benar-benar membutuhkan tingkat kompatibilitas yang Anda tawarkan.
Jika semua pelanggan sudah menggunakan Json.NET misalnya, kemudian menggunakannya dalam produk Anda dan bukan kode deserialisasi Anda sendiri, kurangi ukurannya dan tingkatkan.
Jika Anda memperkenalkan versi kedua dari produk Anda, yang menggunakan perpustakaan pihak ketiga serta yang kompatibel, Anda bisa menilai penyerapan pada keduanya. Apakah pelanggan akan menggunakan pihak ketiga untuk mendapatkan fitur terbaru sedikit lebih awal, atau tetap menggunakan versi yang 'kompatibel'?
sumber
Jawaban singkatnya adalah Anda harus mulai memperkenalkan dependensi pihak ketiga. Selama pertemuan Anda berikutnya, beri tahu semua orang bahwa minggu depan di tempat kerja akan menjadi yang paling menyenangkan selama bertahun-tahun - mereka akan mengganti komponen JSON dan XML dengan sumber terbuka, solusi perpustakaan standar. Beri tahu semua orang bahwa mereka memiliki tiga hari untuk mengganti komponen JSON. Rayakan setelah selesai. Berpesta. Ini layak dirayakan.
sumber
Pada dasarnya itu semua bermuara pada upaya vs risiko.
Dengan menambahkan ketergantungan tambahan atau memperbarui kerangka kerja Anda atau menggunakan API tingkat lebih tinggi, Anda menurunkan upaya Anda tetapi Anda mengambil risiko. Jadi saya sarankan melakukan analisis SWOT .
Seperti yang Anda lihat upaya tambahan untuk mengembangkan solusi kerajinan tangan adalah investasi untuk menurunkan ancaman Anda. Sekarang Anda dapat membuat keputusan strategis.
sumber
Pisahkan pustaka komponen Anda menjadi set "Core", yang tidak memiliki dependensi (pada dasarnya apa yang Anda lakukan sekarang) dan set "Common", yang memiliki dependensi pada pustaka "Core" dan pihak ketiga Anda.
Dengan begitu jika seseorang hanya menginginkan fungsionalitas "Core", mereka dapat memilikinya.
Jika seseorang menginginkan fungsionalitas "Umum", mereka dapat memilikinya.
Dan Anda dapat mengatur apa itu "Core" versus "Common". Anda dapat menambahkan fungsionalitas dengan lebih cepat ke "Umum", dan memindahkannya ke implementasi "Inti" Anda sendiri jika / ketika masuk akal untuk menyediakan implementasi Anda sendiri.
sumber