เมื่อสัปดาห์ที่แล้วเรามีข้อโต้แย้งที่รุนแรงเกี่ยวกับการจัดการโมฆะในชั้นบริการของแอปพลิเคชันของเรา คำถามอยู่ในบริบท. NET แต่จะเหมือนกันใน Java และเทคโนโลยีอื่น ๆ
คำถามคือคุณควรตรวจสอบค่า Null และทำให้โค้ดทำงานไม่ว่าจะเกิดอะไรขึ้นหรือปล่อยให้เกิดฟองสบู่ขึ้นเมื่อได้รับค่า Null อย่างไม่คาดคิด
ในอีกด้านหนึ่งการตรวจสอบ null ที่คุณไม่ได้คาดหวัง (เช่นไม่มีส่วนติดต่อผู้ใช้ที่จะจัดการ) คือในความคิดของฉันเช่นเดียวกับการเขียนบล็อกลองกับจับเปล่า คุณกำลังซ่อนข้อผิดพลาด ข้อผิดพลาดอาจเป็นไปได้ว่าบางสิ่งมีการเปลี่ยนแปลงในรหัสและ null ตอนนี้เป็นค่าที่คาดไว้หรือมีข้อผิดพลาดอื่น ๆ และรหัสผิดจะถูกส่งผ่านไปยังวิธีการ
ในทางกลับกันการตรวจสอบ nulls อาจเป็นนิสัยที่ดีโดยทั่วไป นอกจากนี้หากมีการตรวจสอบแอปพลิเคชันอาจทำงานต่อไปโดยมีเพียงส่วนเล็ก ๆ ของฟังก์ชันที่ไม่มีผลกระทบใด ๆ จากนั้นลูกค้าอาจรายงานข้อบกพร่องเล็ก ๆ เช่น "ไม่สามารถลบความคิดเห็น" แทนที่จะเป็นข้อบกพร่องที่รุนแรงมากเช่น "ไม่สามารถเปิดหน้า X"
คุณทำตามแบบฝึกหัดอะไรบ้างและอะไรคือข้อโต้แย้งของคุณสำหรับหรือต่อต้านแนวทางใดแนวทางหนึ่ง?
ปรับปรุง:
ฉันต้องการเพิ่มรายละเอียดเกี่ยวกับกรณีของเราโดยเฉพาะ เราได้รับวัตถุบางอย่างจากฐานข้อมูลและทำการประมวลผลบางอย่างกับพวกมัน (สมมติว่าสร้างชุดสะสม) นักพัฒนาที่เขียนรหัสไม่ได้คาดหวังว่าวัตถุอาจเป็นโมฆะดังนั้นเขาจึงไม่ได้รวมการตรวจสอบใด ๆ และเมื่อโหลดหน้าเว็บแล้วพบว่ามีข้อผิดพลาดและไม่ได้โหลดหน้าทั้งหมด
เห็นได้ชัดว่าในกรณีนี้ควรมีการตรวจสอบ จากนั้นเราได้พิจารณาว่าควรตรวจสอบวัตถุทุกชิ้นที่ประมวลผลแม้ว่าจะไม่คาดว่าจะหายไปหรือไม่และควรยกเลิกการประมวลผลในที่สุดหรือไม่
ประโยชน์สมมุติจะเป็นหน้าจะทำงานต่อไป นึกถึงผลการค้นหาใน Exchange Exchange ในกลุ่มต่างๆ (ผู้ใช้ความเห็นคำถาม) วิธีนี้สามารถตรวจสอบโมฆะและยกเลิกการประมวลผลของผู้ใช้ (ซึ่งเกิดจากข้อผิดพลาดเป็นโมฆะ) แต่ส่งคืนส่วน "ความคิดเห็น" และ "คำถาม" หน้าจะทำงานต่อไปยกเว้นว่าส่วน "ผู้ใช้" จะหายไป (ซึ่งเป็นข้อผิดพลาด) เราควรล้มเหลวก่อนและทำลายทั้งหน้าหรือทำงานต่อไปและรอให้ใครบางคนสังเกตเห็นว่าส่วน "ผู้ใช้" หายไป?
assert(foo != null, "foo is web control within the repeater, there's no reason to expect it to be null, etc, etc...");