Đã làm việc với các ngoại lệ trong Java và .NET VÀ sau khi đọc rất nhiều bài viết về cách thức / thời điểm / lý do bắt ngoại lệ, cuối cùng tôi đã đưa ra các bước sau mà tôi trải qua trong đầu mỗi khi tôi thấy một ngoại lệ tiềm ẩn xảy ra hoặc ngoại lệ tôi phải nắm bắt (Java) ... ngay cả khi điều đó không bao giờ xảy ra (thở dài ...). Và nó dường như đang hoạt động, ít nhất là đối với tôi:
- Có điều gì hữu ích tôi có thể làm với ngoại lệ đó, (ngoại trừ đăng nhập) không? Nếu câu trả lời là có, hãy viết mã giải pháp và nếu cách giải quyết có thể đưa ra ngoại lệ, hãy chuyển đến 2:
- Bao bọc ngoại lệ xung quanh một ngoại lệ thời gian chạy, ném nó, đi đến 3.
- Trong lớp cấp cao hơn nơi giao dịch cơ sở dữ liệu / quy trình có thể được bắt đầu, bắt ngoại lệ, khôi phục giao dịch, lấy lại ngoại lệ.
- Ở lớp cấp cao nhất (có thể là giao dịch đã được thực hiện), hãy ghi lại ngoại lệ bằng cách sử dụng khung ghi nhật ký như slf4j ( ví dụ như kết hợp với log4j ) hoặc log4net . Nếu có thể, hãy gửi email trực tiếp ngoại lệ đến danh sách phân phối bao gồm các nhà phát triển ứng dụng.
- Nếu có GUI, hiển thị thông báo lỗi cho biết theo cách thân thiện nhất với người dùng, nguyên nhân gây ra sự cố; không hiển thị ngoại lệ / stacktrace, người dùng không quan tâm và không cần biết đó là NullPulumException.
Tôi cũng nên thêm bước 0 , trong đó tôi cố tình ném cái mà tôi gọi là ngoại lệ "doanh nghiệp" (một ngoại lệ mới mà tôi tạo bằng cách mở rộng lớp "Ngoại lệ") khi một số xử lý phức tạp không thể được thực thi do lỗi dữ liệu, NHƯNG được biết là xảy ra vì chúng đã được xác định là trường hợp ngoại lệ trong quá trình phân tích.
Ngoại trừ phần đăng nhập, tôi hoàn toàn đồng ý với các điểm được viết bởi "mikera"; Tôi sẽ chỉ thêm rằng ngoại lệ nên được ghi lại một lần duy nhất.
Ngoài ra, các bước tôi liệt kê có thể khác nếu những gì bạn đang viết là API / Framework . Ở đó, ném các ngoại lệ được thiết kế tốt là bắt buộc để giúp các nhà phát triển hiểu sai lầm của họ.
Đối với việc kiểm tra các trường hợp ngoại lệ, sử dụng các đối tượng giả, bạn sẽ có thể kiểm tra gần như mọi thứ, có thể là ngoại lệ hay không, miễn là các lớp của bạn tôn trọng "một lớp để làm một việc". Cá nhân tôi cũng đảm bảo đánh dấu các phương thức quan trọng nhất nhưng ẩn là "được bảo vệ" thay vì "riêng tư" để tôi có thể kiểm tra chúng mà không gặp quá nhiều khó khăn. Ngoài ra, việc kiểm tra các ngoại lệ rất đơn giản, chỉ cần kích thích ngoại lệ và "mong đợi" một ngoại lệ xảy ra bằng cách bắt nó. Nếu bạn không có ngoại lệ, thì bạn có lỗi trường hợp kiểm tra đơn vị.