ข้อยกเว้นการปฏิบัติหรือคำแนะนำที่ดีที่สุด [ปิด]


12

ฉันคิดว่าปัญหาหลักสองประการของโปรแกรมของฉันคือโครงสร้างรหัส / องค์กรและการจัดการข้อผิดพลาดของฉัน ฉันกำลังอ่าน Code Complete 2 แต่ฉันต้องการอ่านเพื่อทำงานกับปัญหาที่อาจเกิดขึ้น

ตัวอย่างเช่นบนเว็บไซต์หากบางสิ่งสามารถเกิดขึ้นได้เฉพาะเมื่อผู้ใช้ tampers กับข้อมูลผ่านทางจาวาสคริปต์คุณเขียนเพื่อที่? นอกจากนี้เมื่อใดที่คุณไม่พบข้อผิดพลาด? เมื่อคุณเขียนคลาสที่คาดว่าสตริงและ int เป็นอินพุตและพวกเขาไม่ใช่สตริงและ int คุณตรวจสอบสิ่งนั้นหรือไม่หรือคุณปล่อยให้มันลอยไปจนถึงวิธีการโทรที่ผ่านพารามิเตอร์ที่ไม่ถูกต้องหรือไม่

ฉันรู้ว่านี่เป็นหัวข้อกว้าง ๆ ที่ไม่สามารถตอบได้ด้วยคำตอบเดียวที่นี่ดังนั้นสิ่งที่ฉันกำลังมองหาคือหนังสือหรือแหล่งข้อมูลที่ได้รับการยอมรับโดยทั่วไปว่าเป็นการสอนการจัดการข้อยกเว้นที่เหมาะสม


1
คุณใช้ภาษาและแพลตฟอร์มการพัฒนาอะไร
Yusubov

1
ฉันคิดว่า "รหัสสะอาด" มีบทที่ดีเกี่ยวกับปัญหานี้
Hoàng Long

@ElYusubov พูดอะไร รายละเอียดการใช้งานและมาตรฐานของภาษา / แพลตฟอร์มที่คุณติดต่อมีผลกระทบมากกับแนวปฏิบัติที่ดีที่สุด
vaughandroid

คำตอบ:


12

when there is a needหนึ่งในสิ่งที่ดีที่จะจำได้ดำเนินการจัดการข้อยกเว้น

สำหรับแพลตฟอร์มการพัฒนา. NET เพียงทำตามแนวทางของ MSDN - แนวทางปฏิบัติที่ดีที่สุดสำหรับการจัดการข้อยกเว้นรวมถึงตรวจสอบบทความโครงการโค้ดที่ดีนี้ - ข้อยกเว้นการจัดการวิธีปฏิบัติที่ดีที่สุดใน. NET

อย่างไรก็ตามแนวทางต่อไปนี้ส่วนใหญ่เป็นจริงสำหรับแพลตฟอร์มการพัฒนาใด ๆ :

  • อย่าจัดการตรรกะทางธุรกิจด้วยข้อยกเว้น ใช้ข้อความสั่งแบบมีเงื่อนไขแทน หากการควบคุมสามารถทำได้ด้วยคำสั่ง if-else อย่างชัดเจนอย่าใช้ข้อยกเว้นเนื่องจากจะลดความสามารถในการอ่านและประสิทธิภาพ (เช่นการควบคุมค่า null, หารด้วยศูนย์ควบคุม) .

  • ชื่อข้อยกเว้นจะต้องชัดเจนและมีความหมายโดยระบุสาเหตุของข้อยกเว้น

  • โยนข้อยกเว้นสำหรับเงื่อนไขข้อผิดพลาดในขณะที่ใช้วิธีการ เช่นถ้าคุณคืนค่า -1, -2, -3 ฯลฯ แทน FileNotFoundException วิธีนั้นจะไม่สามารถเข้าใจได้

  • ตรวจจับข้อยกเว้นเฉพาะแทนคลาสข้อยกเว้นด้านบน สิ่งนี้จะนำมาซึ่งประสิทธิภาพเพิ่มเติมความสามารถในการอ่านและการจัดการข้อยกเว้นที่เฉพาะเจาะจงมากขึ้น

  • การควบคุม Null ด้วยเงื่อนไขไม่ใช่ทางเลือกอื่นสำหรับการจับ NullPointerException หากเมธอดอาจส่งคืน null ให้ควบคุมด้วยคำสั่ง if-else หากการส่งคืนอาจส่งผลให้ NullPointerException จับมันได้

  • พยายามอย่าโยนข้อยกเว้นใหม่เนื่องจากราคา ถ้าการโยนซ้ำเป็นสิ่งที่ต้องทำใหม่ให้โยนข้อยกเว้นเดิมแทนที่จะสร้างข้อยกเว้นใหม่ สิ่งนี้จะนำมาซึ่งประสิทธิภาพเพิ่มเติม คุณอาจเพิ่มข้อมูลเพิ่มเติมในแต่ละเลเยอร์ลงในข้อยกเว้นนั้น

  • กำหนดลำดับชั้นข้อยกเว้นของคุณเองโดยขยายคลาสข้อยกเว้นปัจจุบัน (เช่น UserException, SystemException และประเภทย่อย) และใช้พวกเขา โดยการทำเช่นนี้คุณสามารถชำนาญการยกเว้นของคุณและกำหนดโมดูล / เลเยอร์ของข้อยกเว้น มากขึ้นที่จะติดตามในลิงค์นี้


2
บางจุดทั่วไปที่ดีแม้ว่าฉันไม่คิดว่าจุดที่ 5 ของคุณ ("การควบคุมแบบไม่มีเงื่อนไขพร้อมเงื่อนไข ... ") นั้นชัดเจนมาก
vaughandroid

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.