ใช้ข้อยกเว้นสำหรับสิ่งที่ยอดเยี่ยมสิ่งที่คุณไม่สามารถคาดหวังได้ว่าจะเจอบ่อยเกินไปสิ่งที่บ่งบอกว่ามีบางอย่างผิดปกติ ตัวอย่างเช่นหากเครือข่ายขัดข้องมันเป็นสิ่งพิเศษสำหรับเว็บเซิร์ฟเวอร์ หากฐานข้อมูลไม่พร้อมใช้งานแสดงว่ามีบางอย่างผิดปกติ หากไฟล์การกำหนดค่าหายไปอาจเป็นเพราะผู้ใช้สับสนกับมัน
อย่าใช้ข้อยกเว้นเพื่อจัดการรหัสที่ไม่ถูกต้อง ในการตรวจสอบความถูกต้องของรหัสคุณควรใช้การยืนยันหรือใน. NET Framework 4 และหลังจากนั้นสัญญารหัส (ซึ่งแทนที่การยืนยันและมีคุณสมบัติที่มีคุณค่าเพิ่มเติมโดยเฉพาะ)
อย่าใช้ข้อยกเว้นในกรณีพิเศษ ความจริงที่ว่าผู้ใช้เมื่อได้รับแจ้งให้ป้อนหมายเลขให้ป้อน "dog" นั้นไม่ได้เป็นข้อยกเว้นที่ยอดเยี่ยมในการได้รับการยกเว้น
ระวังเมื่อเลือกประเภทของข้อยกเว้น สร้างประเภทของคุณเองเมื่อต้องการ เลือกมรดกอย่างระมัดระวังโดยคำนึงว่าผู้ปกครองจะจับเด็กเช่นกัน throw Exception
ไม่เคย
อย่าใช้รหัสส่งคืนสำหรับข้อผิดพลาด รหัสข้อผิดพลาดนั้นถูกหลอกลวงถูกลืมและลืมได้ง่าย หากมีข้อผิดพลาดให้จัดการหรือเผยแพร่ไปยังสแต็กด้านบน
ในกรณีที่คาดว่าวิธีการที่จะกลับข้อผิดพลาดและข้อผิดพลาดไม่ได้เป็นพิเศษให้ใช้ enums ไม่เคยหมายเลขข้อผิดพลาด ตัวอย่าง:
// Note that the operation fails pretty often, since it deals with the servers which are
// frequently unavailable, and the ones which send garbage instead of the actual data.
private LoadOperationResult LoadProductsFromWeb()
{
...
}
ความหมายของLoadOperationResult.ServerUnavailable
, LoadOperationResult.ParsingError
ฯลฯ มีความชัดเจนมากกว่าพูดการจดจำรหัส 12 หมายความว่าเซิร์ฟเวอร์หยุดทำงานและรหัส 13 - ที่ไม่สามารถแยกวิเคราะห์ข้อมูลได้
ใช้รหัสข้อผิดพลาดเมื่ออ้างถึงรหัสทั่วไปซึ่งนักพัฒนาซอฟต์แวร์ทุกคนรู้จักซึ่งทำงานในโดเมนที่ระบุ ตัวอย่างเช่นอย่าสร้างค่า enum สำหรับ HTTP 404 Not Found หรือ HTTP 500 Internal Server Error
ระวังบูลีน ไม่ช้าก็เร็วคุณจะต้องการรู้ว่าไม่ว่าจะเป็นวิธีการเฉพาะที่ประสบความสำเร็จหรือล้มเหลว แต่ทำไม ข้อยกเว้นและ enums มีประสิทธิภาพมากขึ้นสำหรับการที่
อย่าตรวจสอบทุกข้อยกเว้น (ยกเว้นว่าคุณอยู่ที่ด้านบนสุดของสแต็ก) หากคุณพบข้อยกเว้นคุณควรพร้อมที่จะรับมือกับมัน การจับทุกอย่างแสดงว่าคุณไม่สนใจว่ารหัสของคุณทำงานอย่างถูกต้องหรือไม่ วิธีนี้อาจแก้ไข "ฉันไม่ต้องการค้นหาวิธีแก้ไขปัญหานี้" แต่จะทำให้คุณเจ็บปวดไม่ช้าก็เร็ว
ใน C # ไม่ต้องรื้อฟื้นข้อยกเว้นเช่นนี้อีก:
catch (SomeException ex)
{
...
throw ex;
}
เพราะคุณทำลายสแต็ค ทำสิ่งนี้แทน:
catch (SomeException)
{
...
throw;
}
ใช้ความพยายามเมื่อเขียนข้อความยกเว้น กี่ครั้งที่ผมเคยเห็นสิ่งที่ต้องการหรือthrow Exception("wrong data")
throw Exception("shouldn't call this method in this context")
นักพัฒนาคนอื่น ๆ รวมถึงตัวคุณเองในอีกหกเดือนต่อมาจะไม่รู้ว่าข้อมูลผิดอะไรและทำไมหรือทำไมเราไม่ควรเรียกวิธีการบางอย่างในบริบทหรือบริบทใด
อย่าแสดงข้อความแสดงข้อยกเว้นต่อผู้ใช้ พวกเขาไม่คาดหวังสำหรับคนธรรมดาและมักจะไม่สามารถอ่านได้สำหรับนักพัฒนาซอฟต์แวร์เอง
อย่า จำกัด ข้อความยกเว้น การค้นหาเอกสารสำหรับข้อความที่แปลเป็นภาษาท้องถิ่นหมดแล้วและไร้สาระ: ทุกข้อความควรเป็นภาษาอังกฤษและภาษาอังกฤษเท่านั้น
อย่ามุ่งเน้นที่ข้อยกเว้นและข้อผิดพลาดเฉพาะ: บันทึกเป็นสิ่งที่สำคัญอย่างยิ่ง
ใน. NET อย่าลืมที่จะรวมข้อยกเว้นในเอกสาร XML ของวิธีการ:
/// <exception cref="MyException">Description of the exception</exception>
การรวมข้อยกเว้นในเอกสาร XML ทำให้สิ่งที่ง่ายขึ้นสำหรับบุคคลที่ใช้ห้องสมุด ไม่มีอะไรน่ารำคาญไปกว่าการพยายามเดาว่าข้อยกเว้นใดที่อาจถูกโยนทิ้งโดยวิธีการและสาเหตุ
ในแง่นี้การจัดการข้อยกเว้น Javaให้แนวทางที่เข้มงวดและดีกว่า มันบังคับให้คุณจัดการกับข้อยกเว้นที่อาจเกิดขึ้นจากวิธีการที่เรียกหรือประกาศในวิธีการของคุณเองว่ามันจะสามารถโยนข้อยกเว้นที่คุณไม่ได้จัดการทำให้สิ่งต่าง ๆ โปร่งใสเป็นพิเศษ