Kể từ khi Microsoft giới thiệu các khối ứng dụng, tôi đã gặp phải những người sử dụng Exception Handling Application Block. Gần đây tôi đã có một cái nhìn gần hơn bản thân mình và sẽ tóm tắt các chức năng cơ bản như sau (bỏ qua khối sau nếu bạn đã biết nó làm gì):Khối xử lý ngoại lệ của Microsoft - Đây có phải là một ví dụ hoàn hảo cho việc lạm dụng không?
Khối ứng dụng xử lý ngoại lệ nhằm tập trung và cấu hình đầy đủ tập tin cấu hình như sau key exception handling tasks:
- Logging một ngoại lệ
- Thay thế một ngoại lệ
- Bọc một ngoại lệ
- Propa gating một ngoại lệ
- , vv
Thư viện nào đó bằng cách bạn sửa đổi các khối catch của bạn như sau:
try { // Run code. } catch(DataAccessException ex) { bool rethrow = ExceptionPolicy.HandleException(ex, "Data Access Policy"); if (rethrow) { throw; } }
Dựa trên những gì được quy định trong app.config cho tên chính sách (see here for docs), HandleException sẽ hoặc là ...
- ném một ngoại lệ hoàn toàn mới (thay thế ngoại trừ gốc)
- bao gồm ngoại lệ ban đầu trong một trường hợp mới và ném rằng
- nuốt ngoại lệ (tức là không làm gì cả)
- có bạn rethrow ngoại lệ ban đầu
Ngoài ra bạn cũng có thể cấu hình nó để làm công cụ hơn trước (ví dụ đăng nhập trừ).
Bây giờ đây là vấn đề của tôi: Tôi hoàn toàn không thấy làm thế nào nó có thể có lợi để làm cho nó cấu hình cho dù một ngoại lệ được thay thế, bọc, nuốt hoặc rethrown. Theo kinh nghiệm của tôi, quyết định này phải được thực hiện tại thời điểm bạn viết mã vì bạn thường sẽ phải thay đổi mã xung quanh hoặc gọi khi bạn thay đổi hành vi xử lý ngoại lệ. Ví dụ, mã của bạn có thể sẽ bắt đầu hoạt động không chính xác khi bạn cấu hình lại sao cho một ngoại lệ cụ thể được ném vào một điểm cụ thể bây giờ bị nuốt thay vì bị rethrown (có thể có mã sau khối catch không được thực thi khi ngoại lệ xảy ra). Điều tương tự cũng xảy ra đối với tất cả các thay đổi có thể có khác trong xử lý ngoại lệ (ví dụ: thay thế -> rethrow, swallow -> wrap).
Vì vậy, với tôi dòng dưới cùng là khối xử lý ngoại lệ giải quyết các vấn đề thực sự không tồn tại trong thực tế. Việc ghi nhật ký ngoại lệ và bit thông báo là tốt, nhưng không phải tất cả những thứ khác chỉ là một ví dụ hoàn hảo cho việc overengineering?
Câu hỏi hay. +1. Cũng thêm đối số cho "ngoại lệ loại bỏ sắp xếp thứ tự" trong http://stackoverflow.com/questions/438073#438230. Bạn có thể kiểm tra xem nó? – VonC