当您的业务逻辑比数据逻辑更复杂时,最好具有这两层。服务层实现业务逻辑。在大多数情况下,此层必须执行更多的操作,而不仅仅是从DAO对象中调用方法。而且,如果您打算使应用程序更大,那么这可能是最好的解决方案。
假设您要包括一个City实体并在People and City之间创建关系。这是一个例子:
@Transactionalpublic class PeopleService { .... private PeopleDAO pDAO; private CityDAO cDAO; ... public void createPerson(String name, String city) throws PeopleServiceException { Person p = new Person(); p.setName(name); City c = cDAO.getCityByName(city); if (c == null) throw new ServiceException(city + " doesn't exist!"); if (c.isFull()) throw new ServiceException(city + " is full!"); c.addPeople(p); sess().save(p); sess().save(c); } ...}在此示例中,您可以实施更复杂的验证,例如检查数据的一致性。并且PersonDAO尚未修改。
另一个例子:
Spring的DAO和Service层
服务层模式的定义



