java - 在 spring mvc Controller 中使用服务和 DAO

标签 java spring design-patterns spring-mvc

我正在构建一个 Web 应用程序,主要由来自后端/数据库的数据的 CRUD 操作组成。在某些情况下,我必须编写业务逻辑(我相信随着我们深入开发,我们将构建更多的业务逻辑)。目前,对于我正在创建的每个 UI 屏幕,我创建了一个模型类、服务类、DAO 类、一个 Controller (本质上是 servlet)和一堆 jsp 页面。在大多数情况下,服务类只是调用 DAO 中的方法来传入模型对象。本质上,我们使用模型类来映射来自 UI 屏幕的数据。因此, Controller 将在提交表单时填充模型对象。我已经开始使用服务类来保持从 Web 层到 DAO 层的分离层。但有时我觉得服务类只是添加了不必要的 API 调用级别,我认为我可以将 DAO 注入(inject) Controller 并更快地完成任务。我只想在有额外的业务逻辑要执行时才使用服务类。如果您必须设计一个应用程序,您会考虑使用 Controller ->DAO 还是 Controller ->服务->DAO 控制流的哪些因素?

最佳答案

DAO 更细粒度,处理一个特定的实体。服务提供宏观层面的功能,最终可以使用多个 DAO。通常,服务用于定义事务边界以获得原子性。换句话说,如果您最终使用多个 DAO 更新多个表,在服务中定义事务边界将有助于提交或回滚对数据库所做的所有更改。

在您的设计中,由于您主要为各种实体执行 CRUD,因此服务似乎没有增加太多值(value)。但是,将基于 Web 的前端视为更新数据的一种方式。服务的使用将允许您稍后向其他形式的客户端(如第三方集成商等)公开与 Web 服务相同的功能。

因此,综上所述,您的设计似乎符合常规做法。如果你觉得可以基于一些共同的主题将多个服务组合成一个,这样可以减少代码的开销,那么,你应该去做。归根结底,最终目标是创建可维护的代码,在需要时没有人害怕更改。

关于java - 在 spring mvc Controller 中使用服务和 DAO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16233655/

相关文章:

java - 未能找到包含/storage/emulated/0/Android/data/的已配置根目录

java - Java 为某个导入选择哪个 JAR?

java - Spring在路径中找不到配置

java - 当@Autowired 时,SftpRemoteFileTemplate 不适用于 RemoteDirectoryExpression

c++ - 使用访问者模式对事件进行排序

java - 单例模式 : Using Enum Version

java - Spring Web 服务 - 异常跳过 ExceptionResolver

java - Android 谷歌导航应用程序 : can I edit the source code?

java - 让 Spring 编写 Joda DateTime/DateMidnight

java - 在树节点数据中构造和实现聚合(或类似)方法的最佳模式