ฉันกำลังตัดสินใจว่าจะจัดการข้อยกเว้นในแอปพลิเคชันของฉันอย่างไร
มากถ้าปัญหาของฉันเกี่ยวกับข้อยกเว้นมาจาก 1) การเข้าถึงข้อมูลผ่านบริการระยะไกลหรือ 2) การยกเลิกการกำหนดค่าออบเจ็กต์ JSON น่าเสียดายที่ฉันไม่สามารถรับประกันความสำเร็จสำหรับงานเหล่านี้ได้ (ตัดการเชื่อมต่อเครือข่ายอ็อบเจ็กต์ JSON ที่ผิดรูปแบบซึ่งไม่สามารถควบคุมได้)
ดังนั้นหากฉันพบข้อยกเว้นฉันเพียงแค่จับมันภายในฟังก์ชันและส่งคืน FALSE ไปยังผู้โทร ตรรกะของฉันคือผู้โทรทุกคนสนใจจริงๆคือถ้างานสำเร็จไม่ใช่เพราะเหตุใดจึงไม่สำเร็จ
นี่คือตัวอย่างโค้ดบางส่วน (ใน JAVA) ของวิธีการทั่วไป)
public boolean doSomething(Object p_somthingToDoOn)
{
boolean result = false;
try{
// if dirty object then clean
doactualStuffOnObject(p_jsonObject);
//assume success (no exception thrown)
result = true;
}
catch(Exception Ex)
{
//don't care about exceptions
Ex.printStackTrace();
}
return result;
}
ฉันคิดว่าวิธีนี้ใช้ได้ดี แต่ฉันอยากรู้จริงๆว่าแนวทางปฏิบัติที่ดีที่สุดสำหรับการจัดการข้อยกเว้นคืออะไร (ฉันควรทำข้อยกเว้นตลอดทางในกลุ่มการโทรหรือไม่)
โดยสรุปคำถามสำคัญ:
- เป็นเรื่องปกติหรือไม่ที่จะจับข้อยกเว้น แต่ไม่ทำให้เกิดฟองหรือแจ้งระบบอย่างเป็นทางการ (ผ่านบันทึกหรือการแจ้งเตือนไปยังผู้ใช้)
- มีแนวทางปฏิบัติที่ดีที่สุดอะไรบ้างสำหรับข้อยกเว้นที่ไม่ส่งผลให้ทุกอย่างต้องมีการบล็อก try / catch
ติดตาม / แก้ไข
ขอบคุณสำหรับคำติชมทั้งหมดพบแหล่งข้อมูลที่ยอดเยี่ยมเกี่ยวกับการจัดการข้อยกเว้นทางออนไลน์:
- แนวทางปฏิบัติที่ดีที่สุดสำหรับการจัดการข้อยกเว้น | O'Reilly Media
- การจัดการข้อยกเว้นแนวทางปฏิบัติที่ดีที่สุดใน. NET
- แนวทางปฏิบัติที่ดีที่สุด: การจัดการข้อยกเว้น (ตอนนี้บทความชี้ไปที่สำเนา archive.org)
- Antipatterns การจัดการข้อยกเว้น
ดูเหมือนว่าการจัดการข้อยกเว้นเป็นหนึ่งในสิ่งที่แตกต่างกันไปตามบริบท แต่ที่สำคัญที่สุดควรมีความสอดคล้องกันในการจัดการข้อยกเว้นภายในระบบ
นอกจากนี้ระวังรหัสเน่าผ่านการลอง / จับมากเกินไปหรือไม่ให้ข้อยกเว้นด้วยความเคารพ (ข้อยกเว้นคือเตือนระบบต้องเตือนอะไรอีกบ้าง)
นอกจากนี้เป็นความคิดเห็นทางเลือกสวยจากm3rLinEz
ฉันมักจะเห็นด้วยกับ Anders Hejlsberg และคุณว่าผู้โทรส่วนใหญ่สนใจว่าการดำเนินการจะประสบความสำเร็จหรือไม่เท่านั้น
จากความคิดเห็นนี้จะทำให้เกิดคำถามที่ควรคำนึงถึงเมื่อจัดการกับข้อยกเว้น:
- อะไรคือจุดที่มีการโยนข้อยกเว้นนี้?
- มันสมเหตุสมผลอย่างไรที่จะจัดการกับมัน?
- ผู้โทรสนใจเกี่ยวกับข้อยกเว้นจริง ๆ หรือเพียงแค่สนใจว่าการโทรสำเร็จหรือไม่?
- กำลังบังคับให้ผู้โทรจัดการข้อยกเว้นที่อาจเกิดขึ้นอย่างสง่างามหรือไม่?
- คุณเคารพในสำนวนของภาษาหรือไม่?
- คุณจำเป็นต้องคืนค่าสถานะความสำเร็จเช่นบูลีนหรือไม่? การคืนค่าบูลีน (หรือ int) เป็นชุดความคิด C มากกว่า Java (ใน Java คุณจะจัดการกับข้อยกเว้น)
- ทำตามโครงสร้างการจัดการข้อผิดพลาดที่เกี่ยวข้องกับภาษา :)!