spring - 为什么要使用服务层?

标签 spring service-layer

我查看了 http://solitarygeek.com/java/developing-a-simple-java-application-with-spring/comment-page-1#comment-1639 上的示例

我试图弄清楚为什么在他提供的示例中首先需要服务层。如果你把它拿出来,那么在你的客户端,你可以这样做:

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/

相关文章:

java - 微服务Maven项目结构

java - Spring Security 表单登录未识别

java - 服务层中的已检查异常与未检查异常

java - java swing应用程序中的服务层

c# - 我的服务和存储库层的职责

hibernate - EntityManager 应该如何在一个很好的解耦的服务层和数据访问层中使用?

java - EasyMock Controller 映射和状态代码测试

java - 为什么我在使用 Spring Cache 的服务中出现缓存未命中的情况

java - 从实体到 DTO 的转变

java - 服务层和 Controller 的代码分离