Sự hữu ích của required
đã là trung tâm của nhiều cuộc tranh luận và chiến tranh rực lửa. Trại lớn đã tồn tại ở cả hai bên. Một trại thích đảm bảo một giá trị đã có mặt và sẵn sàng sống với những hạn chế của nó nhưng trại kia cảm thấy required
nguy hiểm hoặc không có ích vì nó không thể được thêm vào một cách an toàn cũng không bị xóa.
Hãy để tôi giải thích thêm về lý do tại sao required
các trường nên được sử dụng một cách tiết kiệm. Nếu bạn đã sử dụng proto, bạn không thể thêm trường bắt buộc vì ứng dụng cũ sẽ không cung cấp trường đó và các ứng dụng nói chung không xử lý tốt lỗi. Bạn có thể đảm bảo rằng tất cả các ứng dụng cũ đều được nâng cấp trước, nhưng có thể dễ mắc lỗi và không có ích gì nếu bạn lưu trữ protos trong bất kỳ kho dữ liệu nào (ngay cả trong thời gian ngắn, như memcached). Loại tình huống tương tự được áp dụng khi loại bỏ một trường bắt buộc.
Nhiều trường bắt buộc là "rõ ràng" được yêu cầu cho đến khi ... chúng không. Giả sử bạn có một id
trường cho một Get
phương thức. Đó rõ ràng là yêu cầu. Ngoại trừ, sau này bạn có thể cần thay đổi id
từ int thành chuỗi hoặc int32 thành int64. Đó là đòi hỏi thêm một mới muchBetterId
lĩnh vực, và bây giờ bạn là trái với cái cũ id
trường phải được xác định, nhưng cuối cùng là hoàn toàn bị bỏ qua.
Khi hai vấn đề đó được kết hợp, số lượng các required
lĩnh vực có lợi trở nên hạn chế và các trại tranh luận về việc liệu nó có còn giá trị hay không. Các đối thủ của required
không nhất thiết chống lại ý tưởng, nhưng hình thức hiện tại của nó. Một số đề xuất phát triển một thư viện xác nhận biểu cảm hơn có thể kiểm tra required
cùng với một cái gì đó cao cấp hơn name.length > 10
, đồng thời đảm bảo có một mô hình thất bại tốt hơn.
Proto3 tổng thể dường như thiên về sự đơn giản, và required
việc loại bỏ thì đơn giản hơn. Nhưng có lẽ thuyết phục hơn, loại bỏ required
ý nghĩa đối với proto3 khi kết hợp với các tính năng khác, như loại bỏ sự hiện diện của trường cho các nguyên thủy và loại bỏ các giá trị mặc định ghi đè.
Tôi không phải là nhà phát triển protobuf và không có thẩm quyền về chủ đề này, nhưng tôi vẫn hy vọng rằng lời giải thích này hữu ích.