ฉันกำลังดิ้นรนกับคำถามง่าย ๆ :
ตอนนี้ฉันกำลังทำงานกับแอปพลิเคชันเซิร์ฟเวอร์และฉันต้องคิดค้นลำดับชั้นสำหรับข้อยกเว้น (มีข้อยกเว้นบางอย่างอยู่แล้ว แต่จำเป็นต้องใช้กรอบงานทั่วไป) ฉันจะเริ่มทำสิ่งนี้ได้อย่างไร
ฉันกำลังคิดว่าจะทำตามกลยุทธ์นี้:
1) เกิดอะไรขึ้น?
- มีบางสิ่งถามซึ่งไม่ได้รับอนุญาต
- มีการถามอะไรบางอย่างอนุญาต แต่ไม่ทำงานเนื่องจากพารามิเตอร์ผิด
- มีการถามบางสิ่งอนุญาต แต่ไม่ทำงานเนื่องจากข้อผิดพลาดภายใน
2) ใครเป็นผู้เปิดตัวคำขอ?
- แอปพลิเคชันไคลเอนต์
- แอปพลิเคชันเซิร์ฟเวอร์อื่น
3) การส่งข้อความ: เนื่องจากเรากำลังติดต่อกับแอปพลิเคชันเซิร์ฟเวอร์ทุกอย่างเกี่ยวกับการรับและส่งข้อความ แล้วถ้าเกิดว่าการส่งข้อความผิดพลาดล่ะ
ดังนั้นเราอาจได้รับประเภทข้อยกเว้นดังต่อไปนี้:
- ServerNotAllowedException
- ClientNotAllowedException
- ServerParameterException
- ClientParameterException
- InternalException (ในกรณีที่เซิร์ฟเวอร์ไม่รู้ว่าคำขอมาจากไหน)
- ServerInternalException
- ClientInternalException
- MessageHandlingException
นี่เป็นวิธีการทั่วไปในการกำหนดลำดับชั้นของข้อยกเว้น แต่ฉันกลัวว่าฉันอาจจะขาดบางกรณีที่ชัดเจน คุณมีความคิดเห็นเกี่ยวกับประเด็นที่ฉันไม่ครอบคลุมหรือไม่คุณทราบถึงข้อเสียของวิธีการนี้หรือมีวิธีการทั่วไปในการถามคำถามประเภทนี้ (ในกรณีหลังฉันจะหาได้ที่ไหน)
ขอบคุณล่วงหน้า
catch
บล็อกส่วนใหญ่ที่ฉันใช้ฉันไม่ได้ใช้ข้อยกเว้นมากไปกว่าข้อความแสดงข้อผิดพลาดที่มีอยู่ ฉันไม่ได้มีอะไรที่แตกต่างกันจริง ๆ ที่ฉันสามารถทำได้สำหรับข้อยกเว้นที่เกี่ยวข้องกับการไม่สามารถอ่านไฟล์เป็นหนึ่งล้มเหลวในการจัดสรรหน่วยความจำในระหว่างขั้นตอนการอ่านดังนั้นฉันจึงมักจะจับstd::exception
และรายงานข้อความแสดงข้อผิดพลาด มัน"Failed to open file: %s", ex.what()
ไปยังกองบัฟเฟอร์ก่อนที่จะพิมพ์
catch
บล็อกที่แตกต่างกันมากมายในไซต์การกู้คืนเดียว แต่บ่อยครั้งที่มันไม่สนใจข้อความภายในข้อยกเว้นและพิมพ์ข้อความที่แปลเป็นภาษาท้องถิ่นมากขึ้น ...