의 required
논쟁은 많은 논쟁과 화염 전쟁의 핵심이었습니다. 큰 캠프가 양쪽에 존재했습니다. 한 캠프는 가치를 보장하는 것을 좋아했고 그 한계를 극복 할 의향이 있었지만 다른 캠프는 required
안전하게 추가하거나 제거 할 수 없으므로 위험하거나 도움이되지 않았다고 느꼈습니다 .
required
필드를 드물게 사용해야 하는 이유에 대해 더 자세히 설명하겠습니다 . 이미 프로토를 사용하고 있다면 이전 응용 프로그램은 해당 필드를 제공하지 않으며 일반적으로 응용 프로그램은 오류를 잘 처리하지 못하므로 필수 필드를 추가 할 수 없습니다. 이전의 모든 응용 프로그램을 먼저 업그레이드 할 수 있지만 실수를하기 쉬울 수 있으며 임의의 데이터 저장소에 metocache를 저장하는 경우에도 도움이되지 않습니다 . 필수 필드를 제거 할 때 동일한 상황이 적용됩니다.
많은 필수 필드는 "명백하게"요구 될 때까지 ... 메소드에 대한 id
필드 가 있다고 가정 해 봅시다 Get
. 즉됩니다 분명히 필요합니다. 나중에 나중에 id
int에서 string으로, int32에서 int64 로 변경해야 할 수도 있습니다 . 이를 위해서는 새로운 muchBetterId
필드를 추가해야합니다. 이제 지정 해야하는 이전 id
필드 가 남아 있지만 결국 완전히 무시됩니다.
이 두 가지 문제가 합쳐 required
지면 유익한 분야 의 수가 제한되고 캠프는 여전히 가치가 있는지 논쟁합니다. 반대자 required
들은 반드시 아이디어에 반대하는 것이 아니라 현재의 형태에 반대했다. 더 나은 실패 모델을 확인하면서 required
보다 고급의 것을 확인할 수있는보다 표현적인 검증 라이브러리를 개발할 것을 제안한 사람들 name.length > 10
도 있습니다.
Proto3는 전체적으로 단순성을 선호하는 것으로 보이며 required
제거가 더 간단합니다. 그러나 required
프리미티브에 대한 필드 존재 제거 및 재정의 기본값 제거와 같은 다른 기능과 결합 할 때 proto3에 대한 의미를 제거하는 것이 더 설득력이 있습니다.
나는 프로토 버프 개발자가 아니며 주제에 대해 권위있는 사람은 아니지만 설명이 유용하기를 바랍니다.