我试图弄清楚为什么在他提供的示例中首先需要服务层。如果你把它拿出来,那么在你的客户端,你可以这样做:
UserDao userDao = new UserDaoImpl();
Iterator users = userDao.getUsers();
while (…) {
…
}
服务层似乎只是 DAO 的一个包装器。有人可以给我一个案例,如果服务层被删除,事情可能会变得一团糟?我只是不明白从服务层开始有什么意义。
最佳答案
让服务层成为 DAO 的包装器是一种常见的反模式。在您给出的示例中,它肯定不是很有用。使用服务层意味着您可以获得以下好处:
您可以清楚地区分最好在 Controller 中完成的 Web 类型事件和与 Web 无关的通用业务逻辑。您可以将与服务相关的业务逻辑与 Controller 逻辑分开测试。
您可以指定事务行为,因此如果您调用多个数据访问对象,您可以指定它们发生在同一个事务中。在您的示例中,有一个对 dao 的初始调用,然后是一个循环,它可能包含更多的 dao 调用。将这些调用保留在一个事务中意味着数据库做的工作更少(它不必为每个对 Dao 的调用创建一个新事务),但更重要的是这意味着检索到的数据将更加一致。
您可以嵌套服务,以便如果一个具有不同的事务行为(需要自己的事务),您可以强制执行。
您可以使用 postCommit 拦截器来执行通知操作,例如发送电子邮件,这样就不会破坏 Controller 。
通常我的服务包含单一类型用户的用例,服务上的每个方法都是该用户将执行的单个操作(在单个请求-响应周期中完成的工作),并且与您的例如,其中通常不止一个简单的数据访问对象调用。
关于spring - 为什么要使用服务层?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3688664/