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