我看到一些Spring / Hibernate代码在DAO接口方法中声明DataAccessException
时有不同的策略。
有些人明确声明了,有些则没有(或只是不时):
public interface FlightDao {
boolean decrementSeat(Long flightId, int quantity);
List<Flight> findFlights(String fromAirportCode, String toAirportCode) throws DataAccessException;
public List<Flight> getFlights();
Flight getFlight(Long id);
Flight getFlight(String flightNumber);
void save(Flight flight);
}
什么是最佳做法?为什么?
更新
从spring tutorial的第13.2.2节开始,使用@Repository注释实现DAO pojo以确保底层ORM(或JDBC)异常自动转换为DataAccessException(运行时)异常层次结构非常重要。
答案 0 :(得分:2)
正如你所看到的那样here,这是一个RuntimeException,所以你声明它或者没有在编程方面没有区别。当用户实现该方法时,他可以选择从方法签名中省略此异常。
我能想到把它放在方法签名中的唯一原因就是标记它,这样用户就会知道这个方法可能抛出这个异常,因此他可以选择抓住并处理它。
答案 1 :(得分:1)
如果在查找航班/获得航班/减少座位时存在任何异常,则调用这些“服务”方法的应用程序应该对如何处理这些异常有最终决定权。 FlightDAO作为一项服务应该只是捕获并抛出所有异常。您可能会发现创建新的用户定义的Exception很有用...将其命名为ServiceException或MyDAOException,并使FlightDAO中的所有方法抛出此用户定义的异常。