我试图弄清楚为什么在他提供的示例中首先需要服务层。如果你将其取出,则可以在客户中执行以下操作:
UserDao userDao = new UserDaoImpl();
Iterator users = userDao.getUsers();
while (…) {
…
}
似乎服务层只是DAO的包装。有人可以给我一个情况,如果服务层被删除,情况可能会变得一团糟?我只是看不到拥有服务层的意义。
让服务层成为DAO的包装是一种常见的反模式。在你提供的示例中,它肯定不是很有用。使用服务层意味着你将获得以下好处:
你需要在控制器中最好完成的Web类型活动和与Web不相关的常规业务逻辑之间做出明确区分。你可以与控制器逻辑分开测试与服务相关的业务逻辑。
你可以指定事务行为,因此,如果你有多个数据访问对象的调用,则可以指定它们在同一事务中发生。在你的示例中,有一个对dao的初始调用,然后是一个循环,该循环可能包含更多的dao调用。将这些调用保留在一个事务中意味着数据库的工作量减少了(它不必为对Dao的每次调用都创建一个新的事务),但是更重要的是,这意味着检索到的数据将更加一致。
你可以嵌套服务,以便如果一个服务具有不同的事务行为(需要自己的事务),则可以强制执行。
你可以使用postCommit拦截器执行通知之类的操作,例如发送电子邮件,以免浪费控制器。
通常,我提供的服务包含针对单一类型用户的用例,该服务上的每种方法都是该用户将要执行的单个操作(在单个请求-响应周期中完成的工作),与你的示例不同,通常不只是在其中进行简单的数据访问对象调用。
本文向大家介绍为什么要使用微服务?相关面试题,主要包含被问及为什么要使用微服务?时的应答技巧和注意事项,需要的朋友参考一下 随着互联网的快速发展,各行各业都在用互联网。互联网已经离不开人们的形形色色。随着越来越多的用户,业务场景也愈来愈复杂。 传统的单体架构已经很难满足互联网技术发展的要求,代码可维护性扩展性和可读性降低,维护成本的提高都是驱动微服务的发展趋势。
问题内容: 我只是从Angular开始。阅读Google文档中的服务示例,我只是想知道为什么您会选择使用服务而不是将变量和函数正确地保留在控制器中? 在这种情况下,您何时选择使用服务? 问题答案: 我认为主要原因是: 在控制器之间持久并共享数据。 IE:您创建了一个从数据库中获取数据的服务,如果将其存储在控制器中,一旦更改为另一个控制器,数据将被丢弃(除非您将其存储在$ rootScope中,但这
问题内容: 我刚刚学会了最近的反应,打算将其用于下一个项目。我已经遇到过几次反应服务器端渲染,但是想知道为什么在“现代时代”我们仍然需要它。 在本文中,它认为通过服务器端渲染,用户不必等待从CDN或其他地方加载这些js即可看到初始静态页面,并且该页面将在js到达时恢复功能。 但是在使用webpack生产配置和gzip构建之后,整个捆绑包(包括react,我的代码和许多其他东西)仅占用40kb,而我
本文向大家介绍为什么要使用 kafka,为什么要使用消息队列?相关面试题,主要包含被问及为什么要使用 kafka,为什么要使用消息队列?时的应答技巧和注意事项,需要的朋友参考一下 缓冲和削峰:上游数据时有突发流量,下游可能扛不住,或者下游没有足够多的机器来保证冗余,kafka在中间可以起到一个缓冲的作用,把消息暂存在kafka中,下游服务就可以按照自己的节奏进行慢慢处理。 解耦和扩展性:项目开始的
问题内容: 我注意到,Oracle JDK中使用了许多Java 8方法,如果给定的对象(参数)为,则会在内部抛出该方法。 但是,如果取消引用对象,则将被抛出。那么,为什么要做这个额外的null检查并抛出 ? 一个明显的答案(或好处)是它使代码更具可读性,我同意。我很想知道在方法开始时使用的其他原因 。 问题答案: 因为您可以这样做使事情变得 明确 。喜欢: 或更短: 现在您 知道了 : 当 成功使
问题内容: 我是Mockito的新手,我已经开始学习它。但是我有一些疑问。为什么我们需要使用Mockito?据我所知,它用于模拟(创建虚拟对象)并在具有实际运行代码之前编写测试用例。但是,如果我想测试已经实施的代码以检查它们是否正常运行,该怎么办。我如何使用Mockito进行测试? 例如,我有CRUD方法,我想通过使用我的Create方法在数据库中实际插入数据来测试Create是否正常运行,这与其