gpt4 book ai didi

java - 三层架构和异常(exception)

转载 作者:搜寻专家 更新时间:2023-10-30 21:30:00 25 4
gpt4 key购买 nike

为每一层应用程序设置异常被认为是一种很好的做法(即 PresentationExceptionServiceExceptionPersistenceException 等)。但是,如果我的服务层直接调用 DAO 方法(持久层的方法)而不进行额外的操作呢?

像这样:

public class MyService {
private IPersonDAO dao = new PersonDAO();

public void deletePerson(int id) {
dao.deletePerson(id);
}

}

我是否应该用 try-catch block 包装这个 DAO 方法调用并将可能的异常重新抛出为 ServiceException?每个 DAO 方法是否应该只抛出 PersistenceException

最佳答案

好吧,您的 Dao 异常与服务层无关,服务层与 Dao 层异常无关。正确的方法是捕获 dao 异常并将新的自定义异常重新抛出到服务层。

如果你需要调试异常并且你想要确切的原因,你可以使用getCause()getSuppressed()方法。

Should I wrap this DAO method invocation with try-catch block and rethrow possible exception as ServiceException? Should each DAO method throw only PersistenceException?

---> 是的包装它。您可以从 dao 层抛出其他异常。请参见下面的示例:

public class MyDao {       

public Entity getMyEntity(int id) throws ObjectNotFoundException, PersistenceException {
try {
// code to get Entity
// if entity not found then
throw new ObjectNotFoundException("Entity with id : " + id + "Not found.");
} catch(Exception e) { // you can catch the generic exception like HibernateException for hibernate
throw new PersistenceException("error message", e);
}
}

}

关于java - 三层架构和异常(exception),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14722579/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com