Câu trả lời tất nhiên là "nó phụ thuộc", nhưng với trường hợp sử dụng của bạn, tôi sẽ nói không. Đây là lý do tại sao:
C # là một ngôn ngữ tuyệt vời - đầu tiên, tốt nhất - hướng đối tượng xung quanh. Trên thực tế, điều đó tốt đến nỗi đôi khi tôi sẽ bị bắt gặp khi cố gắng thực hiện một tầm nhìn thuần túy cuồng tín về những gì bắt đầu như một dự án đơn giản. Điều đó không xảy ra với tôi rất nhiều khi viết mã JavaScript hoặc Objective-C hoặc PHP.
Khi tôi ở trong "chế độ" này, loại tê liệt này, một trong những triệu chứng có thể là nỗi ám ảnh với việc xử lý ngoại lệ và thuốc generic và lập trình meta. Đôi khi cả ba cùng nhau. Nó có nhiều khả năng là một vấn đề khi tôi đang làm việc trên một cái gì đó mới, tương đối chưa biết, hoặc với các thông số kỹ thuật và mục tiêu kém chất lượng. Thay vì sa lầy vào các chi tiết triển khai , tôi nghĩ, tại sao lại cố gắng tạo ra thứ gì đó có thể phù hợp với hầu hết các kịch bản mà tôi dự đoán một cách hợp lý? Sau đó, khi tôi nhận được các chi tiết, nền tảng sẽ được đặt và tôi sẽ viết một loạt các phương pháp nhỏ cứng đầu, và như vậy. Có lẽ ai đó sẽ làm việc với mã UI, tôi sẽ chỉ cung cấp cho họ các dịch vụ tốt đẹp này và các hợp đồng này ...
Thật không may, điều đó vẫn chưa xảy ra với tôi. Điều có xu hướng xảy ra là tôi bắt đầu con đường này hoạt động trên "cơ sở hạ tầng" - những thứ như:
- Viết các giao diện bộ chứa IoC của riêng tôi hoặc nói cách khác
Castle.Windsor
- Xác định cách tôi sẽ xử lý ánh xạ loại trong ứng dụng
- Viết logic luồng điều khiển cho các lớp cơ sở trừu tượng giống
Interceptors
và gói các cuộc gọi đến các thành viên trừu tượng với xử lý ngoại lệ
- Tạo các lớp cơ sở trừu tượng cho
IRepository
, IUnitOfWork
, IDomainService
, ICrossCuttingValidation
vv
- Cố gắng mô tả một mô hình đối tượng phân cấp cho một cái gì đó mà bản chất của nó phủ nhận cách tiếp cận meta như vậy
IFrameworkException
( như )
Khi bạn gác máy về việc liệu mô tả của một ngoại lệ có đủ chính xác cho thị hiếu của bạn hay không, bạn thực sự đang từ chối một số tính năng quan trọng khác được triển khai. Bản chất của ngoại lệ cũng là nói - nó không phải là ngoại lệ được xử lý theo sự kiện , nó xuất hiện rõ ràng so với bất kỳ phương pháp nhập liệu nào (như UI hoặc ống dẫn hoặc một cái gì đó) và có thể có tính chất quyết định - như trong, bạn không thể dự đoán những gì người dùng sẽ nhập, nhưng bạn có thể dự đoán lắp ráp nào bạn chọn để tải hoặc không có gì.
Nhân tiện, nếu mô tả làm phiền bạn rất nhiều, bạn có thể viết một phương thức mở rộng để ghi đè lên nó trong phạm vi thích hợp không?
Vì vậy, đây thực sự chỉ là tôi loại dự án quá trừu tượng và tê liệt phân tích của riêng tôi lên bạn nhưng tôi nghĩ nó có thể phù hợp. Tôi sẽ nói rằng để ở bên an toàn, chỉ phân lớp một Exception
khi:
- Bạn thực sự đã trải qua một ngoại lệ thời gian chạy mà bạn đang tìm cách xử lý nói chung
- Ngoại lệ thời gian chạy không phải là thứ mà bạn có thể loại trừ một cách hợp lý tại thời điểm thiết kế
- Ngoại lệ chưa được bao phủ tốt bởi số lượng lớn các
Exception
lớp con hiện có
- Bạn thực sự có một ý tưởng trong đầu về cách bạn muốn xử lý ngoại lệ HOẶC nếu không, chỉ vì nó phức tạp đến mức bạn cần phải suy nghĩ về nó và quay lại với nó
- Ý tưởng của bạn vượt ra ngoài việc thay đổi siêu dữ liệu, phạm vi của nó, ngoại lệ bên trong của nó, v.v. và liên quan nhiều hơn đến đối tượng hoặc sự kiện cơ bản tạo ra ngoại lệ và / hoặc phương tiện thực sự xử lý nó
- Bạn đã viết hoặc không chịu trách nhiệm cho phần lớn các mặt phải đối mặt của những thứ như UI