Yararlılığı required
birçok tartışma ve alev savaşının kalbinde olmuştur. Her iki tarafta da büyük kamplar vardı. Bir kamp, bir değerin mevcut olduğunu garanti etmeyi severdi ve sınırlamaları ile yaşamak isterdi, ancak diğer kamp required
, güvenli bir şekilde eklenemeyeceği veya kaldırılamayacağı için tehlikeli veya yararsız hissetti .
required
Alanların neden az kullanılmaları gerektiğinin gerekçelerini daha fazla açıklayayım . Zaten bir protokol kullanıyorsanız, zorunlu bir alan ekleyemezsiniz çünkü eski uygulamaların bu alanı sağlamaması ve genel olarak uygulamalar hatayı iyi işlemez. Önce tüm eski uygulamaların yükseltildiğinden emin olabilirsiniz, ancak bir hata yapmak kolay olabilir ve protoları herhangi bir veri deposunda (kısa süreli, hatta memcached gibi) saklıyorsanız yardımcı olmaz . Gerekli alan kaldırılırken aynı durum geçerlidir.
Zorunlu alanların birçoğu zorunlu olana kadar "açıkça" zorunluydu. Diyelim ki id
bir Get
yöntem için bir alanınız var . Bu kesinlikle gerekli. Dışında, daha sonra id
int'den dizeye veya int32'den int64'e değiştirmeniz gerekebilir . Bu, yeni bir muchBetterId
alan eklemeyi gerektirir ve şimdi belirtilmesi gereken eski id
alanla bırakılırsınız , ancak sonunda tamamen göz ardı edilir.
Bu iki sorun birleştirildiğinde, yararlı required
alanların sayısı sınırlı hale gelir ve kamplar hala değerinin olup olmadığını tartışırlar. Muhalifler required
bu fikre mutlaka karşı değil, şu anki biçimine karşıydılar. Bazıları , required
daha gelişmiş bir şeyle birlikte kontrol edebilecek daha iyi bir doğrulama kütüphanesi geliştirmeyi name.length > 10
ve aynı zamanda daha iyi bir başarısızlık modeline sahip olmayı önerdi .
Proto3 genel olarak basitliği destekliyor gibi görünüyor ve required
kaldırma işlemi daha basit. Ancak, daha ikna edici olabilir, required
ilkel öğeler için alan varlığının kaldırılması ve geçersiz kılınan varsayılan değerlerin kaldırılması gibi diğer özelliklerle birleştirildiğinde proto3 için mantıklı bir şekilde kaldırılır.
Ben bir protobuf geliştiricisi değilim ve bu konuda hiçbir şekilde yetkili değilim, ama yine de açıklamanın yararlı olduğunu umuyorum.