Kegunaan required
telah menjadi jantung dari banyak perdebatan dan nyala api. Kamp-kamp besar telah ada di kedua sisi. Satu kamp suka menjamin nilai ada dan bersedia hidup dengan keterbatasannya, tetapi kamp lainnya merasa required
berbahaya atau tidak membantu karena tidak dapat ditambahkan atau dihilangkan dengan aman.
Biarkan saya menjelaskan lebih banyak alasan mengapa required
bidang harus digunakan hemat. Jika Anda sudah menggunakan proto, Anda tidak bisa menambahkan bidang yang diperlukan karena aplikasi lama tidak akan menyediakan bidang itu dan aplikasi secara umum tidak menangani kegagalan dengan baik. Anda dapat memastikan bahwa semua aplikasi lama di-upgrade terlebih dahulu, tetapi bisa dengan mudah membuat kesalahan dan itu tidak membantu jika Anda menyimpan protos di datastore apa pun (bahkan berumur pendek, seperti memcached). Situasi yang sama berlaku saat menghapus bidang yang wajib diisi.
Banyak bidang wajib "jelas" diperlukan sampai ... tidak. Katakanlah Anda memiliki id
bidang untuk suatu Get
metode. Itu jelas diperlukan. Kecuali, nanti Anda mungkin perlu mengubah id
dari int ke string, atau int32 ke int64. Itu membutuhkan penambahan muchBetterId
bidang baru , dan sekarang Anda dibiarkan dengan id
bidang lama yang harus ditentukan, tetapi akhirnya benar-benar diabaikan.
Ketika kedua masalah tersebut digabungkan, jumlah required
bidang yang menguntungkan menjadi terbatas dan kamp-kamp berdebat tentang apakah masih memiliki nilai. Lawan dari required
tidak harus menentang gagasan itu, tetapi bentuknya saat ini. Beberapa menyarankan untuk mengembangkan perpustakaan validasi yang lebih ekspresif yang dapat memeriksa required
bersama dengan sesuatu yang lebih maju seperti name.length > 10
, sementara juga memastikan untuk memiliki model kegagalan yang lebih baik.
Proto3 secara keseluruhan tampaknya mendukung kesederhanaan, dan required
penghapusan lebih sederhana. Tapi mungkin lebih meyakinkan, menghapus required
masuk akal untuk proto3 ketika dikombinasikan dengan fitur-fitur lain, seperti penghapusan kehadiran bidang untuk primitif dan penghapusan nilai default utama.
Saya bukan pengembang protobuf dan sama sekali tidak otoritatif tentang masalah ini, tapi saya masih berharap penjelasannya bermanfaat.