【发布时间】:2013-01-18 13:29:06
【问题描述】:
我有一个具有三轮架构的应用程序。而且我不明白如何在这种情况下处理异常。我收集了一些问题:
1 .我是否需要创建一个通用异常,例如PersistentException,并使所有 DAO 类方法只抛出一种类型的异常 - PersistentException? IE。在每个 DAO 方法 (CRUD) 中都这样做:
public create(Entity instance) {
try {
...// all operations here
} catch(Exception e) {
throw new PersistentException(e);
}
}
2 。可以为每个 EJB 服务创建一个异常类(每个EJB 接口一个异常)?
即假设我有一个 EJB bean,如 PersonManagementBean、OrganizationManagementBean、EmployeeManagementBean 以及相应的 @local 和 @remote 接口。它们暴露给客户端,即实际上它们是会话外观(因此它们位于服务层)。所以为每个 bean 创建对应的 Exception 类是个好主意(PersonManagementException,OrganizationManagementException,EmployeeManagementException)?
或者最好只有一个名为 ServiceException 的异常(如 DAO 的情况)?
3 .哪些类型的异常会引发我的服务(忙碌)级别(在常见情况下)?我可以将 DAO (PersistentException) 异常传播给客户端吗?即
public void relocatePerson() {
try {
Person p = personDao.getPerson(); // can throw PersistentException
....
if (someCondition) {
throw new PersonManagementException(); // throwing same PersonManagementException
}
....
} catch(PersonManagementException e) {
throw e; //don't need to rewrap same exception
} catch(PersistentException e) {
throw e; // DO I need to throw it as PersistentException to client? Or it's better to rewrap it as PersonManagementException?
} catch(Exception e) {
throw new PersonManagementException(e) //throwing all exception as service specific exception
}
}
或者我需要将所有异常(在常见情况下)重新抛出为特定于服务的异常?
- “在一般情况下”我的意思是我知道在某些情况下,某些方法可能会抛出额外的异常并提供一些有用的信息(例如
ValidationException提供有关哪些对象未通过验证规则的信息)
【问题讨论】:
标签: c# java design-patterns multi-tier three-tier