Tôi đã gặp phải một cuộc tranh luận giữa một vài người bạn và tôi. Họ thích những ngoại lệ chung như ClientErrorException
và ServerErrorException
với chi tiết là các trường hợp ngoại lệ, trong khi tôi thích làm cho mọi thứ cụ thể hơn. Ví dụ: tôi có thể có một số trường hợp ngoại lệ như:
BadRequestException
AuthenticationFailureException
ProductNotFoundException
Mỗi cái được xây dựng dựa trên mã lỗi được trả về từ API.
Theo các Ưu điểm của Ngoại lệ, điều này có vẻ như là thành ngữ đối với Java. Tuy nhiên, ý kiến của bạn bè tôi không hẳn là hiếm.
Có một cách ưa thích nào về khả năng đọc mã và khả năng sử dụng API, hay nó thực sự chỉ được ưu tiên?
abstract
và khái quát các lớp ngoại lệ bằng các phương thức getter và sau đó làm cho các lớp chi tiết mở rộng các lớp chung. Ví dụ AuthenticationFaliureException extends ClientErrorException
. Bằng cách này, mọi người dùng có thể chọn cách họ muốn đối phó với các ngoại lệ. Nó làm việc nhiều hơn, rõ ràng. Tuy nhiên, khi viết một ứng dụng (thay vì thư viện), đó là một tình huống khác IMHO. Trong trường hợp đó, tôi sẽ không làm cho các ngoại lệ chi tiết hơn bạn cần chúng, vì đơn giản vì lợi ích.