Gần đây tôi đã phát triển một mô-đun bổ sung cho một dịch vụ hiện có được phát triển bởi một đồng nghiệp. Ông đã đặt một khối try/catch trong hàm làm việc chính để bắt tất cả các trường hợp ngoại lệ unhadled rằng bọt lên đến mức này, đăng nhập chúng lại với nhau với thông tin stack trace vv:Cách triển khai xử lý ngoại lệ cấp cao nhất?
try
{
// do main work
}
catch(Exception ex)
{
// log exception info
}
Trong khi điều này làm cho chương trình rất ổn định (như trong 'không sụp đổ'), tôi ghét nó vì khi tôi kiểm tra mã của mình, tôi không thấy các ngoại lệ do nó gây ra. Tất nhiên tôi có thể xem nhật ký ngoại lệ và xem có mục mới hay không, nhưng tôi rất thích phản hồi trực tiếp về ngoại lệ khi nó được ném (với con trỏ trên dòng bên phải trong mã, xin vui lòng).
Tôi đã loại bỏ cấp độ cao nhất này/thử/nắm bắt ít nhất trong khi tôi vẫn đang viết mã và thử nghiệm. Nhưng bây giờ nhiệm vụ của tôi đã hoàn thành và tôi phải quyết định thời gian để đưa nó trở lại cho bản phát hành, hay không. Tôi nghĩ rằng tôi nên làm điều đó, bởi vì nó làm cho dịch vụ ổn định hơn, và toàn bộ quan điểm của nó là nó chạy trong nền mà không cần bất kỳ sự giám sát nào. Mặt khác, tôi đã đọc rằng người ta chỉ nên gọi các trường hợp ngoại lệ cụ thể (như trong IoException
), không phải là chung Exception
.
Lời khuyên của bạn về vấn đề này là gì?
Nhân tiện, dự án được viết bằng C#, nhưng tôi cũng quan tâm đến câu trả lời cho các ngôn ngữ không phải .NET.
Xem thêm http://stackoverflow.com/questions/576532/is-dying-is-awesome-preferred – Brian