ประโยชน์ของrequiredการเป็นหัวใจของการถกเถียงและสงครามเปลวไฟ ค่ายใหญ่มีอยู่ทั้งสองด้าน ค่ายหนึ่งชอบรับประกันว่ามีคุณค่าอยู่และยินดีที่จะอยู่กับข้อ จำกัด ของมัน แต่ค่ายอื่น ๆ รู้สึกว่าrequiredเป็นอันตรายหรือไม่ช่วยเหลือเนื่องจากไม่สามารถเพิ่มหรือเอาออกได้อย่างปลอดภัย
ให้ฉันอธิบายเหตุผลเพิ่มเติมว่าทำไมrequiredควรใช้ฟิลด์อย่างไม่ จำกัด หากคุณใช้โปรโตแล้วคุณไม่สามารถเพิ่มฟิลด์ที่ต้องการได้เพราะแอปพลิเคชันเก่าจะไม่ให้ฟิลด์นั้นและแอปพลิเคชันโดยทั่วไปไม่สามารถจัดการกับความล้มเหลวได้ดี คุณสามารถตรวจสอบให้แน่ใจว่าแอปพลิเคชันเก่าทั้งหมดได้รับการอัปเกรดก่อน แต่สามารถทำผิดได้ง่ายและไม่ช่วยถ้าคุณเก็บโปรโตในที่เก็บข้อมูลใด ๆ (แม้อายุสั้นเช่น memcached) สถานการณ์แบบเดียวกันนี้ใช้เมื่อลบฟิลด์ที่ต้องการ
ฟิลด์ที่ต้องกรอกจำนวนมากจำเป็นต้องมี "ชัดเจน" จนกระทั่ง ... พวกเขาไม่ได้ สมมติว่าคุณมีidเขตข้อมูลสำหรับGetวิธีการ นั่นคือเห็นได้ชัดต้อง ยกเว้นภายหลังคุณอาจจำเป็นต้องเปลี่ยนidจาก int เป็นสตริงหรือ int32 เป็น int64 ที่ต้องเพิ่มmuchBetterIdเขตข้อมูลใหม่และตอนนี้คุณถูกทิ้งไว้กับidเขตข้อมูลเก่าที่จะต้องระบุ แต่ในที่สุดก็จะถูกละเว้นอย่างสมบูรณ์
เมื่อรวมสองปัญหาเข้าด้วยกันจำนวนrequiredฟิลด์ที่เป็นประโยชน์จะมี จำกัด และค่ายโต้เถียงกันว่ามันยังมีคุณค่าหรือไม่ ฝ่ายตรงข้ามrequiredไม่จำเป็นต้องขัดกับความคิด แต่เป็นรูปแบบปัจจุบัน บางคนแนะนำให้พัฒนาไลบรารีการตรวจสอบที่มีความหมายมากขึ้นซึ่งสามารถตรวจสอบrequiredพร้อมกับสิ่งที่ก้าวหน้ากว่าเช่นname.length > 10เดียวกันในขณะเดียวกันก็ต้องแน่ใจว่ามีโมเดลความล้มเหลวที่ดีกว่า
Proto3 โดยรวมดูเหมือนจะชอบความเรียบง่ายและrequiredการลบนั้นง่ายกว่า แต่อาจจะน่าเชื่อถือมากขึ้นการลบrequiredความรู้สึกที่เหมาะสมสำหรับ proto3 เมื่อรวมกับคุณสมบัติอื่น ๆ เช่นการลบการมีอยู่ของฟิลด์สำหรับการพื้นฐานและการลบค่าเริ่มต้นที่แทนที่
ฉันไม่ได้เป็นนักพัฒนา protobuf และฉันก็ไม่ได้มีอำนาจในเรื่อง แต่ฉันก็ยังหวังว่าคำอธิบายจะเป็นประโยชน์