Có. một ý tưởng hay là tạo ra các ngoại lệ độc lập của riêng bạn cho mỗi lớp.
Ví dụ, nếu bạn đang sử dụng một triển khai DAO cụ thể, bạn nên bọc ngoại lệ cụ thể thực hiện cho ngoại lệ chung của riêng bạn và ném nó về phía trước để Service Layer. Tuy nhiên, bạn cần phải nhạy cảm trong việc tạo hệ thống phân cấp ngoại lệ của riêng mình sao cho nó không phải là chi phí phát triển ứng dụng cũng như khả năng duy trì thông tin được yêu cầu trong Lớp dịch vụ. Hầu hết các lần, mã lỗi tùy chỉnh với ngoại lệ chung đủ điều này.
Một cái gì đó như thế này có thể được sử dụng để mô phỏng ngoại lệ cụ thể thực hiện và ném vào lớp dịch vụ.
class AppDAOException extends Exception {
public final static int _FAIL_TO_INSERT = 1;
public final static int _UPDATE_FAILED = 2;
public final static int _SQL_ERROR = 3;
private int errorCode;
public AppDAOException(int errorCode) {
this.errorCode = errorCode;
}
public getErrorCode() {
return errorCode;
}
}
Throwing từ thực hiện DAO:
try {
//code here
} catch (some.impl.SQLSyntaxException e) {
throw new AppDAOException (AppDAOException._SQL_ERROR);
}
Về rò rỉ quan tâm: Bạn có thể không muốn lớp dịch vụ của bạn phải bận tâm về tất cả các trường hợp ngoại lệ - chẳng hạn như:
} catch(NoRowExistsException e) {
return null;
} finally {
//release resources
}
Vì vậy, cuộc gọi phải được thực hiện dựa trên nhu cầu ứng dụng.
Nguồn
2012-02-13 06:59:33
bạn có thể vui lòng cung cấp một ví dụ về điều này ... cảm ơn bạn –
Tôi đã viết một bài đăng về điều này đôi khi trở lại. Vui lòng kiểm tra https://dzone.com/articles/quotdecouplingquot-the-exception-puzzle – Santosh
ok, cảm ơn, tôi sẽ trải qua –