Tôi sử dụng Ngoại lệ tùy chỉnh để giao tiếp bản chất của lỗi.
Ví dụ: tôi thích sử dụng khung được cung cấp "ArgumentNullException" để kiểm tra đối số. Sau đó, khi tôi thấy lỗi này trong trình gỡ rối hoặc trong nhật ký lỗi, tôi ngay lập tức biết được bản chất của lỗi mà không cần đọc thêm nữa.
Đầu kia của quang phổ là InvalidOperationException có thể có ý nghĩa khá nhiều.
Cách thay thế cho ngoại lệ tùy chỉnh là thông báo lỗi chi tiết. Đó là ok, nhưng bằng cách thực hiện một ngoại lệ tùy chỉnh như ConnectionFailed là có ý nghĩa hơn. Sau đó, bản thân thông điệp có thể cung cấp thêm chi tiết.
Khi tạo ngoại lệ tùy chỉnh như vậy, tôi không thêm bất kỳ thuộc tính mới nào. Lý do cho điều này là nếu bạn có một trình ghi lỗi, bạn muốn nó hoạt động trên tất cả các ngoại lệ. Nếu bạn thêm một thuộc tính đặc biệt, thì trình ghi lỗi sẽ bỏ qua nó. Ví dụ, nếu bạn sử dụng MSTest, khi bạn chạy thử nghiệm của bạn và nó không thành công, các thuộc tính tùy chỉnh không được hiển thị. Nhưng nếu bạn gắn bó với thuộc tính Message của baseclass, nó sẽ hiển thị tốt.
Vì vậy, các subclassing là rất đơn giản:
public class NavigationException : Exception{
public NavigationException() {}
public NavigationException(string msg) : base(msg) {}
public NavigationException(string msg, Exception inner) : base(msg, inner) {}
}
này rất đơn giản, làm việc với bất kỳ logger lỗi, và khi tôi nhìn thấy nó, tôi biết đó là một vấn đề Navigation và tôi có thể xem chi tiết nếu cần thiết .
Greg
Nguồn
2013-08-07 19:12:35
Tương tự như http://bit.ly/hVTSgp Tôi khuyên bạn nên thu hẹp chủ đề của mình bằng cách giải thích thêm những gì bạn đang tìm kiếm. –
Ông chủ của tôi muốn tôi tạo một lớp ngoại lệ tùy chỉnh cho một chương trình tôi đã viết để chúng tôi có thể dễ dàng xác định các lỗi cụ thể. Nó sẽ là những thứ như: Không có dữ liệu trong một ô excel cụ thể, ngoại lệ vượt trội (có thể sử dụng tiêu chuẩn cho điều này), dữ liệu không được tải lên theo thứ tự cụ thể, v.v. –
Có vẻ như bạn đang sử dụng ngoại lệ để xử lý luồng logic nghiệp vụ - vấn đề cần được giải quyết mà không cần sử dụng ngoại lệ nếu có thể. – cjk