Nếu bạn có lỗi thư viện nội bộ (không mong muốn), hãy để các ngoại lệ thời gian chạy lan truyền. Nếu có lỗi trong mã thư viện, máy khách sẽ bị lỗi. Sửa lỗi trong thư viện. Đừng bắt tất cả và trả về một ngoại lệ cụ thể cho thư viện, điều này sẽ không làm được gì tốt.
Nếu bạn mong đợi mọi thứ (đôi khi) xảy ra sai, hãy tạo điều này vào API. Điều này dựa trên nguyên tắc mà bạn không nên sử dụng ngoại lệ cho luồng chương trình thông thường.
Ví dụ:
ProcessResult performLibraryTask(TaskSpecification ts)
Bằng cách này bạn có thể có ProcessResult biết tình trạng lỗi:
ProcessResult result = performLibraryTask(new FindSmurfsTaskSpecification(SmurfColor.BLUE));
if (result.failed()) {
throw new RuntimeException(result.error());
}
Cách tiếp cận này cũng tương tự như cách tiếp cận trở lại null, nhưng bạn có thể gửi thêm thông tin trở lại khách hàng.
EDIT:
Đối với tương tác mà không phù hợp với các giao thức đồng ý, bạn có thể ném lỗi thời gian chạy, mà bạn có thể tài liệu. Ví dụ:
if (currentPeriod().equals(SmurfColor.BLUE) && SmurfColor.GREEN.equals(taskSpecification.getSmurfColor()) {
throw new IllegalStateException("Cannot search for green smurfs during blue period, invalid request");
}
Xin lưu ý rằng điều này là do tương tác vi phạm hợp đồng và không được dự kiến xảy ra.
Nguồn
2010-02-11 16:39:34
Bạn có biết về mẫu đối tượng Null không? http://en.wikipedia.org/wiki/Null_Object_pattern –