การอ่านบทความของ Eric Lippert เกี่ยวกับข้อยกเว้นเป็นการเปิดตาอย่างแน่นอนเกี่ยวกับวิธีที่ฉันควรเข้าหาข้อยกเว้นทั้งในฐานะผู้ผลิตและผู้บริโภค อย่างไรก็ตามฉันยังคงพยายามกำหนดแนวทางเกี่ยวกับวิธีหลีกเลี่ยงการโยนข้อยกเว้นที่น่ารำคาญ
โดยเฉพาะ:
- สมมติว่าคุณมีวิธีการบันทึกที่สามารถล้มเหลวเพราะก) ใครบางคนอื่น ๆ มีการปรับเปลี่ยนการบันทึกก่อนที่คุณหรือข) ค่าที่คุณกำลังพยายามที่จะสร้างที่มีอยู่แล้ว เงื่อนไขเหล่านี้คาดว่าจะเกิดขึ้นและไม่ได้ยอดเยี่ยมดังนั้นแทนที่จะทิ้งข้อยกเว้นที่คุณตัดสินใจที่จะสร้าง TrySave ของเมธอดของคุณซึ่งจะส่งคืนบูลีนที่ระบุว่าการบันทึกสำเร็จหรือไม่ แต่ถ้ามันล้มเหลวผู้บริโภคจะรู้ได้อย่างไรว่าปัญหาคืออะไร หรือมันจะดีที่สุดที่จะกลับ enum ระบุผลชนิดของ Ok / RecordAlreadyModified / ValueAlreadyExists? ด้วยจำนวนเต็ม TryParse ปัญหานี้ไม่มีอยู่เนื่องจากมีเพียงเหตุผลเดียวที่วิธีการล้มเหลว
- ตัวอย่างก่อนหน้านี้เป็นสถานการณ์ที่น่ารำคาญจริง ๆ หรือไม่? หรือจะโยนข้อยกเว้นในกรณีนี้เป็นวิธีที่ต้องการหรือไม่ ฉันรู้ว่ามันเป็นวิธีการที่ทำในห้องสมุดและกรอบงานส่วนใหญ่รวมถึง Entity framework
- คุณจะตัดสินใจเมื่อสร้างรุ่นลองของวิธีการของคุณเทียบกับวิธีการทดสอบก่อนว่าวิธีการทำงานหรือไม่ ฉันกำลังปฏิบัติตามแนวทางเหล่านี้:
- หากมีโอกาสเกิดสภาวะการแข่งขันให้สร้างรุ่นทดลอง สิ่งนี้จะป้องกันความต้องการของผู้บริโภคที่จะได้รับการยกเว้นจากภายนอก ตัวอย่างเช่นในวิธีการบันทึกอธิบายไว้ก่อนหน้านี้
- หากวิธีการทดสอบเงื่อนไขค่อนข้างจะทำทุกอย่างที่วิธีการเดิมทำแล้วให้ลองสร้างเวอร์ชัน ตัวอย่างเช่นจำนวนเต็ม.TryParse ()
- ในกรณีอื่น ๆ ให้สร้างวิธีการทดสอบเงื่อนไข