Thực hành xử lý ngoại lệ tốt nhất hoặc khuyến nghị? [đóng cửa]


12

Tôi nghĩ rằng hai vấn đề chính với các chương trình của tôi là cấu trúc / tổ chức mã và xử lý lỗi của tôi. Tôi đang đọc Code Complete 2, nhưng tôi cần đọc thứ gì đó để làm việc với các vấn đề tiềm ẩn.

Ví dụ: trên một trang web, nếu điều gì đó chỉ có thể xảy ra nếu người dùng làm căng dữ liệu qua javascript, bạn có viết cho điều đó không? Ngoài ra, khi nào bạn không bắt lỗi? Khi bạn viết một lớp dự kiến ​​một chuỗi và một int là đầu vào, và chúng không phải là một chuỗi và int, bạn có kiểm tra điều đó không, hoặc bạn có để nó nổi lên theo phương thức gọi truyền các tham số không chính xác không?

Tôi biết đây là một chủ đề rộng lớn không thể được trả lời trong một câu trả lời duy nhất ở đây, vì vậy điều tôi đang tìm kiếm là một cuốn sách hoặc tài nguyên thường được chấp nhận là giảng dạy thực hành xử lý ngoại lệ thích hợp.


1
bạn đang sử dụng ngôn ngữ và nền tảng phát triển nào?
Yusubov

1
Tôi nghĩ rằng "Mã sạch" có một chương hay về vấn đề này
Hoàng Long

Những gì @ElYusubov nói. Các chi tiết triển khai và tiêu chuẩn của ngôn ngữ / nền tảng mà bạn đang giao dịch có rất nhiều ảnh hưởng đến các thực tiễn tốt nhất.
vaughandroid

Câu trả lời:


12

Một trong những điều tốt để nhớ là thực hiện xử lý ngoại lệ when there is a need.

Đối với nền tảng phát triển .NET, chỉ cần làm theo hướng dẫn MSDN - Thực tiễn tốt nhất để xử lý ngoại lệ , cũng như kiểm tra bài viết dự án mã đẹp này - Xử lý ngoại lệ Thực tiễn tốt nhất trong .NET

Tuy nhiên, các nguyên tắc sau hầu hết đúng với mọi nền tảng phát triển:

  • Đừng quản lý logic kinh doanh với các ngoại lệ. Sử dụng báo cáo có điều kiện thay thế. Nếu một điều khiển có thể được thực hiện với câu lệnh if-other rõ ràng, đừng sử dụng các ngoại lệ vì nó làm giảm khả năng đọc và hiệu suất (ví dụ: điều khiển null, chia cho điều khiển 0). .

  • Tên ngoại lệ phải rõ ràng và có ý nghĩa, nêu rõ nguyên nhân của ngoại lệ.

  • Ném ngoại lệ cho các điều kiện lỗi trong khi thực hiện một phương pháp. Ví dụ: nếu bạn trả về các giá trị -1, -2, -3, v.v. thay vì FileNotFoundException, phương thức đó không thể hiểu được.

  • Bắt các ngoại lệ cụ thể thay vì lớp Ngoại lệ hàng đầu. Điều này sẽ mang lại hiệu suất bổ sung, dễ đọc và xử lý ngoại lệ cụ thể hơn.

  • Kiểm soát Null với các điều kiện không phải là một cách thay thế để bắt NullPulumException. Nếu một phương thức có thể trả về null, hãy điều khiển nó bằng câu lệnh if-other. Nếu trả về có thể ném NullPulumException, hãy bắt nó.

  • Cố gắng không ném lại ngoại lệ vì giá cả. Bu nếu ném lại là điều bắt buộc, hãy ném lại ngoại lệ tương tự thay vì tạo một ngoại lệ mới. Điều này sẽ mang lại hiệu suất bổ sung. Bạn có thể thêm thông tin bổ sung trong mỗi lớp vào ngoại lệ đó.

  • Xác định hệ thống phân cấp ngoại lệ của riêng bạn bằng cách mở rộng lớp Exception hiện tại (ví dụ: UserException, SystemException và các loại phụ của chúng) và sử dụng chúng. Bằng cách này, bạn có thể chuyên môn hóa các ngoại lệ của mình và xác định mô-đun / lớp ngoại lệ có thể sử dụng lại. nhiều hơn để theo dõi trong liên kết này


2
Một số điểm chung tốt, mặc dù tôi không nghĩ rằng điểm thứ 5 của bạn ("Kiểm soát hoàn toàn với các điều kiện ...") là rất rõ ràng.
vaughandroid

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.