Kegunaan requiredtelah 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 requiredberbahaya atau tidak membantu karena tidak dapat ditambahkan atau dihilangkan dengan aman.
Biarkan saya menjelaskan lebih banyak alasan mengapa requiredbidang 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 idbidang untuk suatu Getmetode. Itu jelas diperlukan. Kecuali, nanti Anda mungkin perlu mengubah iddari int ke string, atau int32 ke int64. Itu membutuhkan penambahan muchBetterIdbidang baru , dan sekarang Anda dibiarkan dengan idbidang lama yang harus ditentukan, tetapi akhirnya benar-benar diabaikan.
Ketika kedua masalah tersebut digabungkan, jumlah requiredbidang yang menguntungkan menjadi terbatas dan kamp-kamp berdebat tentang apakah masih memiliki nilai. Lawan dari requiredtidak harus menentang gagasan itu, tetapi bentuknya saat ini. Beberapa menyarankan untuk mengembangkan perpustakaan validasi yang lebih ekspresif yang dapat memeriksa requiredbersama 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 requiredpenghapusan lebih sederhana. Tapi mungkin lebih meyakinkan, menghapus requiredmasuk 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.