它被认为是很好的做法,对于应用程序的每个层(即一个例外PresentationException,ServiceException,PersistenceException等)。但是,如果我的服务层直接调用DAO方法(持久层方法)而不进行其他操作,该怎么办?
PresentationException
ServiceException
PersistenceException
像这样:
public class MyService { private IPersonDAO dao = new PersonDAO(); public void deletePerson(int id) { dao.deletePerson(id); } }
我是否应该将此DAO方法调用包装为一个try- catch块,然后将可能的异常抛出为ServiceException?每个DAO方法应该只抛出PersistenceException吗?
try- catch
那么,您的Dao异常与服务层无关,并且服务层与dao层异常无关。正确的方法是捕获dao异常,然后将新的自定义异常扔到服务层。
如果需要调试异常并需要确切原因,则可以使用getCause()和getSuppressed()方法。
我应该用try- catch块包装此DAO方法调用,然后将可能的异常作为ServiceException抛出吗?每个DAO方法都应该只抛出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); } } }