一尘不染

为什么要使用服务层?

spring

我试图弄清楚为什么在他提供的示例中首先需要服务层。如果你将其取出,则可以在客户中执行以下操作:

UserDao userDao = new UserDaoImpl();
Iterator users = userDao.getUsers();
while (…) {
…
}

似乎服务层只是DAO的包装。有人可以给我一个情况,如果服务层被删除,情况可能会变得一团糟?我只是看不到拥有服务层的意义。


阅读 440

收藏
2020-04-15

共1个答案

一尘不染

让服务层成为DAO的包装是一种常见的反模式。在你提供的示例中,它肯定不是很有用。使用服务层意味着你将获得以下好处:

  • 你需要在控制器中最好完成的Web类型活动和与Web不相关的常规业务逻辑之间做出明确区分。你可以与控制器逻辑分开测试与服务相关的业务逻辑。

  • 你可以指定事务行为,因此,如果你有多个数据访问对象的调用,则可以指定它们在同一事务中发生。在你的示例中,有一个对dao的初始调用,然后是一个循环,该循环可能包含更多的dao调用。将这些调用保留在一个事务中意味着数据库的工作量减少了(它不必为对Dao的每次调用都创建一个新的事务),但是更重要的是,这意味着检索到的数据将更加一致。

  • 你可以嵌套服务,以便如果一个服务具有不同的事务行为(需要自己的事务),则可以强制执行。

  • 你可以使用postCommit拦截器执行通知之类的操作,例如发送电子邮件,以免浪费控制器。

通常,我提供的服务包含针对单一类型用户的用例,该服务上的每种方法都是该用户将要执行的单个操作(在单个请求-响应周期中完成的工作),与你的示例不同,通常不只是在其中进行简单的数据访问对象调用。

2020-04-15