在 spring mvc 控制器中使用服务和 DAO

2023-12-24

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


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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 spring mvc 控制器中使用服务和 DAO 的相关文章

  • JTree 节点不会被直观地选择

    不知何故 我无法为我的 JTree 节点启用 选择突出显示 我正在我的项目中使用自定义单元格渲染器 这很可能导致此问题 这是完整的渲染器类代码 protected class ProfessionTreeCellRenderer exten
  • 无法加载 jar 文件的主类

    我使用 Eclipse IDE 开发了一个应用程序 创建应用程序后 我以 jar 格式导出项目 当我尝试运行此 jar 文件时 出现错误 无法加载主类 请帮忙 当您将项目导出为 jar 时 请参阅此所以问题 https stackoverf
  • 通过 InjectMocks Spy 注入对象

    我需要对一个类运行一系列单元测试 该类具有 Autowired Logger 实现 实现的基本思想是 Mock Logger logger InjectMocks TestedClass tested 但我想保存日志输出功能 Mockito
  • Java 泛型/类型调度问题

    考虑以下程序 import java util List import java util ArrayList public class TypeTest public static class TypeTestA extends Type
  • 如何将 Spotlight for Help 插入本地化的 macOS 应用程序?

    我正在 macOS 上使用 Swing GUI 框架实现 Java 应用程序 当使用system外观和感觉以及screen菜单栏 Swing 自动插入一个搜索栏 called 聚光灯寻求帮助 https developer apple co
  • Java替换特定字符

    这是我在这个网站上的第一个问题 所以我会尽量不要成为一个十足的菜鸟 我目前正在用java 创建刽子手游戏 所以我问你的问题是我们是否被赋予了 幽灵 这个词 并将 Ghost 替换为 hiddenWord ghost length for i
  • cucumber-junit-platform-engine 中的功能文件发现

    In cucumber junit我使用的库 CucumberOptions定义功能文件位置 package com mycompany cucumber import cucumber api CucumberOptions import
  • 使用 Guava 联合两个 ImmutableEnumSets

    我想联合两个ImmutableEnumSets来自番石榴 这是我的尝试 public final class OurColors public enum Colors RED GREEN BLUE YELLOW PINK BLACK pub
  • 空对象模式以避免空检查?

    最近 我遇到了空对象设计模式 我的同事说它可以用来消除整个代码中遇到的空指针检查 例如 假设 DAO 类返回有关 Customer 的信息 在名为 CustomerVO 的值对象中 我的主类应该提取名字和电子邮件 ID 并向客户发送电子邮件
  • Install4j:如何在安装结束时执行命令行 java -jar filename.jar

    在 Intall4j 中 在安装结束时 我只想通过执行如下命令行来初始化某些内容 java jar filename jar 我怎样才能归档这个任务install4j Thanks 将 运行可执行文件或批处理文件 操作添加到 安装屏幕 并设
  • 从 html 页面和 javascript 调用 java webservice

    我正在尝试从 javascript 调用 java 实现的 Web 服务 使用 NetBeans IDE 我读过很多关于 jQuery 和 AJAX 的内容 但我似乎无法掌握它 假设我的 Web 服务 WSDL 位于 http localh
  • 从 Java 日历迁移到 Joda 日期时间

    以前 当我第一次设计股票应用相关软件时 我决定使用java util Date表示股票的日期 时间信息 后来我体会到了大部分方法java util Date已弃用 因此 很快 我重构了所有代码以利用java util Calendar 然而
  • 让JScrollPane控制多个组件

    对于我的应用程序 我正在设计一个脚本编辑器 目前我有一个JPanel其中包含另一个JPanel保存行号 位于左侧 以及JTextArea用于允许用户输入代码 位于右侧 目前 我已经实施了JScrollPane on the JTextAre
  • Apache Commons CLI:替代已弃用的 OptionBuilder?

    IntelliJ 显示此示例代码中不推荐使用 OptionBuilderhttp commons apache org proper commons cli usage html http commons apache org proper
  • 将 RSA 密钥从 BigIntegers 转换为SubjectPublicKeyInfo 形式

    WARNING 最初的问题是关于 PKCS 1 编码密钥 而问题中的实际示例需要SubjectPublicKeyInfo X 509 编码密钥 我目前正致力于在 java 中从头开始实现 RSA 算法 特别是密钥生成方面 现在我的代码可以给
  • 如何为 Jackson 编写一个包罗万象的(反)序列化器

    当您提前知道类型时 编写自定义序列化器非常容易 例如 MyType一个人可以写一个MyTypeSerializer extends StdSerializer
  • Android:单一活动,多个视图

    我不是 Android 专业人士 尽管我开发了一个包含 50 多个活动的应用程序 这使得该应用程序非常庞大 经过8周的开发 现在出现了一些问题 导致应用程序难以维护和升级 我正在处理的主要问题是 我无法将对象引用传递给活动的构造函数 事实上
  • 从一个文本文件中获取数据并将其移动到新的文本文件

    我有一个文件 里面有数据 在我的主要方法中 我读入文件并关闭文件 我调用另一种方法 在原始文件的同一文件夹内创建一个新文件 所以现在我有两个文件 原始文件和通过我调用的方法生成的文件 我需要另一种方法 从原始文件中获取数据并将其写入创建的新
  • MongoDB Java 驱动程序:MongoCore 驱动程序与 MongoDB 驱动程序与 MongoDB 异步驱动程序

    MongoDB Java 驱动程序有三种不同的驱动程序选项 核心驱动 MongoDB 驱动程序 MongoDB 异步驱动程序 The 驱动程序描述页面 https docs mongodb org ecosystem drivers jav
  • Java中有类似分支/跳转表的东西吗?

    Java有类似分支表或跳转表的东西吗 分支表或跳转表是 根据维基百科 http en wikipedia org wiki Branch table 用于描述使用分支指令表将程序控制 分支 转移到程序的另一部分 或可能已动态加载的不同程序

随机推荐

  • Docker - 无法在现有文件上安装卷,文件已存在

    我正在尝试在 Docker 中为我的应用程序构建一个数据容器 我运行此命令来公开一些卷 docker run name svenv nl data v etc environment v etc ssl certs v var lib my
  • 按屏幕尺寸排列的 Android 资源文件夹

    我开发了一款Android游戏 支持市场上几乎所有的分辨率 240x320 320x480 480x800 480x854 600x1024 我的问题是 当我尝试支持平板电脑时 我不明白为什么 Android 将资源划分在不同的文件夹中 h
  • 转换泛型列表时显式转换运算符错误

    我正在创建一个显式转换运算符 以在实体类型的通用列表与模型类型的通用列表之间进行转换 有谁知道为什么我收到以下错误 用户定义的转换必须与封闭类型相互转换 我已经在 Entity objA 和 Model objA 之间有一个显式转换运算符
  • 无法在 android 10 中启动活动背景 [ android Q ]

    我使用 android 10 android Q galaxy 10 我用的是android studio 3 3 使用AVD 并制作了一个api 29 android 10 虚拟电话 在虚拟机上 我执行我的应用程序 然后启动其他应用程序
  • jQuery/iframe 在 Chrome 中不工作

    我在这里创建了一个 Facebook 粉丝页面 它包含 iframe 来调用某些使用 jquery 的页面 图像库 除了 Chrome 之外 所有浏览器都运行良好 Chrome 中的 iframe 中没有显示任何内容 只有空的白色背景 我尝
  • 爪哇。如何正确同步 getter 和 setter?

    如果我在一个对象中有多个可变属性 并且将由多个线程对其进行操作 那么我知道它们应该是同步的 class Doggie private String name private int age public void setName Strin
  • 如何访问 Django 模板中的用户配置文件?

    我使用存储一些额外的每用户信息AUTH PROFILE MODULE http docs djangoproject com en dev topics auth storing additional information about u
  • CodeIgniter 无法实例化控制器类

    所以我试图解决为什么 CodeIgniter 不会显示任何输出 除了 404 等 我检查了从 php apache 和 codeigniter 中的错误日志到模块重写的所有内容 一切似乎都配置得很好 我开始深入研究 CodeIgniter
  • 直到成功失败表达式检查多种类型的异常

    在Mule中 我在HTTP端点周围使用until success来捕获连接异常 超时 我捕获了 3 个不同的 Java 异常 java net ConnectException java net SocketTimeoutException
  • Java中按字段名称分组

    我正在尝试按 Java 对象的字段对它们进行分组 即人 java public class Person String name String surname 所以如果我有nPerson 反对 将所有名为 David 的人放入地图中的最简单
  • 用java编写C#委托

    我怎样才能在java版本中编写下面的代码 我读过类似的问题 但它们很令人困惑 他们回答说java没有像c 那样的委托功能 另一方面他们用java中的委托实现来回答 但没有什么与我的情况相似 我真的希望这个问题是清楚的 一周以来我一直被困住
  • 如何使用多个值设置 Amazon RDS SQL_MODE

    MySQL 允许在 my cnf 文件中将参数 SQL MODE 设置为多个值 如何在 Amazon RDS 上执行相同操作 更新 此问题已得到解决 见下文 MySQL 允许在 my cnf 文件中将参数 SQL MODE 设置为多个值 但
  • 如何正确推送 JSQMessagesViewController

    我有一个 Swift 项目 并尝试在其中使用 JSQMessagesViewController 我已经使用 cocoapods 来安装框架 并使用 swift import 语句导入它 import JSQMessagesViewCont
  • 如何从 C 中获取 ld 链接描述文件中定义的变量值

    我正在编写一个运行裸机的程序 我试图从自定义链接器脚本中获取一个变量以在 C 中使用 这是我尝试过的 From C extern unsigned long START OF PROG MEMORY volatile unsigned lo
  • 从 C# 向 PLC 发送 FINS 命令

    我尝试发送FINS命令通过 UDP 从 PC C NET 发送到 PLC 以太网模块 Omron 但没有从 PLC 得到任何响应 并且不知道从哪里可以开始故障排除 PLC has a very simple ladder logic as
  • Kotlin arrow-kt 扁平化嵌套 任一

    我正在使用函数库进行编程arrow kt 原名kategory 我在用着Eithermonad 用于聚合 api 调用的错误或成功信息 我让自己陷入了一种我有嵌套的状态 这本来就不应该发生 Either单子 我试图扁平化结构以获得内部单子
  • 使用子进程打开 Windows 快捷方式文件“.lnk”

    我对 Python 相当陌生 一直在尝试制作一个程序来为我打开 Minecraft 启动器 Context 然而 新的启动器 exe文件被阻止 因为它位于 windowsapp 文件中 这需要很多我宁愿避免的事情 所以我希望看看是否可以打开
  • 将 Android ADT 工具从 21.0.1 更新到 21.1.0

    我已将 SDK 更新到 21 1 以及如何更新旧版本中的 ADT 21 1 当我打开我的 SDK 时 它显示 此 Android SDK 需要 Android Developer Toolkit 版本 21 1 0 或更高版本 当前版本为
  • 编辑用户出错,临时更改了app.user.username,如何解决?

    我们为用户使用 Symfony2 框架和 FOSUserBundle 所以我们有自己的UserBundle 它继承自FOSUserBundle 问题是 当我们发送用于编辑密码错误的用户的表单时 标头中显示的 app user usernam
  • 在 spring mvc 控制器中使用服务和 DAO

    我正在构建一个 Web 应用程序 主要由后端 数据库数据的 CRUD 操作组成 在某些情况下 我必须编写业务逻辑 我确信随着我们深入开发 我们将构建更多的业务逻辑 目前 对于我创建的每个 UI 屏幕 我创建一个模型类 Service 类 D