Trong công ty của tôi, chúng tôi đang xây dựng một ứng dụng web chứa các dịch vụ trung tâm máy chủ do chúng tôi tự thiết kế và sau đó chỉ định là giao diện. Tức là các giao diện là ứng dụng cụ thể và sau đó chúng được triển khai với các thư viện bên thứ ba mà chúng ta có thể thay đổi theo thời gian. Khi nói đến các ngoại lệ, tôi đã nhận ra rằng các ngoại lệ được ném bởi các dịch vụ của chúng tôi phải là các ngoại lệ dành riêng cho ứng dụng của chúng tôi, trái ngược với các ngoại lệ cụ thể thực hiện.
Bây giờ, tôi tự hỏi làm thế nào các ngoại lệ của chúng ta nên được cấu trúc và liên quan với nhau.
Đầu tiên, hãy xem xét một ngoại lệ chung MyAppException
. Ngoại lệ này chỉ ra rằng một cái gì đó không được khám phá đã sai và điều tốt nhất chúng ta có thể làm là hiển thị một thông báo cho người dùng nói rằng có gì đó không ổn và chúng tôi đang xử lý nó. Lỗi có thể là cơ sở dữ liệu bị lỗi hoặc một cái gì đó similair. Ngoại lệ này sẽ bị ném ra khỏi tất cả các phương thức làm việc với cơ sở dữ liệu.
Thứ hai, xem xét một ngoại lệ MyAppDuplicateException
. Ngoại lệ này sẽ chỉ ra rằng người dùng đã cố lưu một cái gì đó vào cơ sở dữ liệu đã có sẵn. Ở đây, chúng ta có thể hiển thị một thông báo lỗi cụ thể hơn nhiều và ngoại lệ này chỉ được đưa ra từ các phương thức chèn hoặc cập nhật các hàng cơ sở dữ liệu.
Ứng dụng này cũng có thể chứa các ngoại lệ khác tương tự như đối MyAppDuplicateException
với các tình huống lỗi bị loại trừ khác. Vd MyAppNotFoundException
...
Bây giờ cho câu hỏi của tôi:
- Các ngoại lệ khác có nên mở rộng
MyAppException
? Tôi thực sự thấy không có lý do cho điều này, tôi đã nhìn thấy nó ở rất nhiều nơi và tự hỏi nếu có một mục đích cho nó. Nhược điểm của điều này như tôi thấy đó là một tuyên bố thử / bắt không cần quan tâm đến ngoại lệ cụ thể trong trường hợp này. Nó chỉ có thể bắt ngoại lệ hàng đầu và vì điều này, nó không cần xử lý lỗi cụ thể mà gần như là có ngoại lệ cụ thể. - Nếu các ngoại lệ khác không mở rộng
MyAppException
, nênMyAppException
là mộtjava.lang.RuntimeException
? Điều này sẽ không yêu cầu thực thi mã để bắt nó, điều này đối với tôi nghe có vẻ tự nhiên vì quan điểm của ngoại lệ là nói rằng một cái gì đó chưa biết đã xảy ra và mã thực thi không bị loại trừ để có thể xử lý nó. Mã tại điểm vào của yêu cầu vẫn có thể có câu lệnh try / Catch bắtMyAppException
và đảm bảo rằng thông báo được hiển thị cho người dùng.
chỉnh sửa Không có câu hỏi nếu các trường hợp ngoại lệ cụ thể như MyAppDuplicateException
nên được kiểm tra hay không, thì chắc chắn nên được kiểm tra.