ส่วนหนึ่งของโปรแกรมของฉันดึงข้อมูลจากหลาย ๆ ตารางและคอลัมน์ในฐานข้อมูลของฉันเพื่อการประมวลผล บางคอลัมน์อาจเป็นnull
แต่ในบริบทการประมวลผลปัจจุบันที่เป็นข้อผิดพลาด
สิ่งนี้จะ "เกิดขึ้นตามหลักวิชา" ไม่ควรเกิดขึ้นดังนั้นหากมันชี้ไปที่ข้อมูลที่ไม่ดี ข้อผิดพลาดที่มีความรุนแรงแตกต่างกันขึ้นซึ่งข้อมูลคือnull
; เช่นสำหรับบางฟิลด์การประมวลผลควรจะหยุดและบางคนได้รับแจ้งสำหรับคนอื่น ๆ การประมวลผลควรได้รับอนุญาตให้ดำเนินการต่อและเพียงแค่แจ้งใครบางคน
มีสถาปัตยกรรมที่ดีหรือหลักการออกแบบเพื่อจัดการกับรายการที่หายาก แต่เป็นไปได้null
หรือไม่?
โซลูชันควรเป็นไปได้ที่จะนำไปใช้กับ Java แต่ฉันไม่ได้ใช้แท็กเพราะฉันคิดว่าปัญหาค่อนข้างไม่เชื่อเรื่องภาษา
ความคิดบางอย่างที่ฉันมี:
ใช้ NOT NULL
ที่ง่ายที่สุดคือการใช้ข้อ จำกัด NOT NULL ในฐานข้อมูล
แต่ถ้าหากการแทรกข้อมูลดั้งเดิมมีความสำคัญมากกว่านั้นขั้นตอนการประมวลผลในภายหลังจะเป็นอย่างไร ดังนั้นในกรณีที่ส่วนแทรกจะใส่null
ลงในตาราง (อาจเป็นเพราะข้อบกพร่องหรืออาจเป็นเหตุผลที่ถูกต้อง) ฉันไม่ต้องการให้ส่วนแทรกล้มเหลว สมมติว่าส่วนต่าง ๆ ของโปรแกรมขึ้นอยู่กับข้อมูลที่ใส่เข้าไป แต่ไม่ได้อยู่ในคอลัมน์นี้ ดังนั้นฉันจึงค่อนข้างเสี่ยงข้อผิดพลาดในขั้นตอนการประมวลผลปัจจุบันแทนขั้นตอนการแทรก นั่นเป็นเหตุผลที่ฉันไม่ต้องการใช้ข้อ จำกัด NOT NULL
อย่างไร้เดียงสาขึ้นอยู่กับ NullPointerException
ฉันสามารถใช้ข้อมูลราวกับว่าฉันคาดหวังว่ามันจะอยู่ที่นั่นเสมอ (และนั่นควรจะเป็นอย่างนั้นจริง ๆ ) และจับ NPE ที่ได้ในระดับที่เหมาะสม (เช่นเพื่อให้การประมวลผลของรายการปัจจุบันหยุดลง แต่ไม่ใช่ความคืบหน้าการประมวลผลทั้งหมด ) นี่คือหลักการ "ล้มเหลวเร็ว" และฉันมักชอบมัน หากเป็นข้อบกพร่องอย่างน้อยฉันจะได้รับ NPE ที่บันทึกไว้
แต่แล้วฉันก็สูญเสียความสามารถในการแยกแยะความแตกต่างระหว่างข้อมูลที่หายไปหลายชนิด เช่นสำหรับข้อมูลที่ขาดหายไปฉันสามารถทิ้งมันไว้ แต่สำหรับคนอื่นการประมวลผลควรหยุดและผู้ดูแลระบบแจ้งเตือน
ตรวจสอบnull
ก่อนการเข้าถึงแต่ละครั้งและโยนข้อยกเว้นที่กำหนดเอง
ข้อยกเว้นที่กำหนดเองจะให้ฉันตัดสินใจการกระทำที่ถูกต้องตามข้อยกเว้นดังนั้นนี่จึงเป็นวิธีที่จะไป
แต่ถ้าฉันลืมตรวจสอบที่ไหนสักแห่ง? นอกจากนี้ฉันยังยุ่งเหยิงรหัสของฉันด้วยการตรวจสอบ null ซึ่งไม่เคยคาดหวังหรือไม่ค่อยเกิดขึ้น (และแน่นอนว่าไม่ใช่ส่วนหนึ่งของการไหลของตรรกะทางธุรกิจ)
หากฉันเลือกที่จะไปทางนี้รูปแบบใดที่เหมาะสมที่สุดสำหรับแนวทาง
ยินดีต้อนรับความคิดและความคิดเห็นเกี่ยวกับวิธีการของฉัน ยังแก้ปัญหาได้ดีกว่าทุกชนิด (รูปแบบ, หลักการ, สถาปัตยกรรมที่ดีขึ้นของรหัสหรือรุ่นของฉันเป็นต้น)
แก้ไข:
มีข้อ จำกัด อีกประการหนึ่งคือในการที่ฉันใช้ ORM เพื่อทำแผนที่จากฐานข้อมูลกับวัตถุที่มีอยู่ดังนั้นการตรวจสอบค่า null ในระดับนั้นจะไม่ทำงาน (เนื่องจากมีการใช้วัตถุเดียวกันในส่วนที่ null ไม่ทำอันตรายใด ๆ ) . ฉันเพิ่มสิ่งนี้เพราะคำตอบที่ให้ไว้จนถึงทั้งสองกล่าวถึงตัวเลือกนี้