服务层和控制器:谁负责什么?

2023-11-25

在课堂上,我们现在正在学习如何构建 Spring 应用程序,即使没有直接涉及 Spring,我们也学习了如何为 DAO 和服务层对象创建接口。

如果我错了,请纠正我: DAO 层非常抽象:它只包含 CRUD 操作,并进一步用于读取数据。(即:获取所有对象、获取特定对象等)

服务层:包含创建事物、删除事物的服务,这是业务逻辑应该存在的地方。

现在所有这些在服务层都有意义了;除了“更新”对象。您是否只是放置一个仅将对象保存在数据库中的“更新”函数?或者您还需要在那里定义逻辑吗?这就是我困惑的地方,我的理解是 Spring 中的对象只是 POJO 的。那么谁来验证数据呢?

假设我有一个对象“孩子” 它有:Name, SurName, Gender, Photo, Birthdate字段。 我该如何命名这些服务?或者你会让控制器负责验证,这对我来说似乎不合适。另一方面,将每个需要调用的 setter 委托给服务层似乎也不合适。

所以基本上:帮助我定义如何通过服务层保存对象。


一般来说,Spring 服务是事务性的。事物进入特定的服务方法,因为它们应该在同一事务中组合在一起。如果你想从数据库中检索一个对象,调整它,并保存新版本,检索和保存应该在同一个服务方法中。所以你的服务方法是根据你需要应用程序为用户做什么来确定的。

我尝试限制控制器执行与验证 http 参数、决定使用什么参数调用什么服务方法、在 httpsession 或请求中放入什么、要重定向或转发到什么视图或类似的 Web 相关内容相关的工作。

就验证而言:验证控制器中的输入参数是一件好事,可以确保没有人可以用虚假输入破坏您的应用程序。控制器中的验证往往是为了确保输入在语法上正确(包括检测注入攻击),而服务级别验证则是为了确保数据库中的状态符合您的预期。

因此控制器包含网络框架基础设施代码,服务包含应用程序逻辑代码。

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

服务层和控制器:谁负责什么? 的相关文章

  • 如何找到给定字符串的最长重复子串

    我是java新手 我被分配寻找字符串的最长子字符串 我在网上研究 似乎解决这个问题的好方法是实现后缀树 请告诉我如何做到这一点或者您是否有任何其他解决方案 请记住 这应该是在 Java 知识水平较低的情况下完成的 提前致谢 附 测试仪字符串
  • 使用 Android 发送 HTTP Post 请求

    我一直在尝试从 SO 和其他网站上的大量示例中学习 但我无法弄清楚为什么我编写的示例不起作用 我正在构建一个小型概念验证应用程序 它可以识别语音并将其 文本 作为 POST 请求发送到 node js 服务器 我已确认语音识别有效 并且服务
  • JAXb、Hibernate 和 beans

    目前我正在开发一个使用 Spring Web 服务 hibernate 和 JAXb 的项目 1 我已经使用IDE hibernate代码生成 生成了hibernate bean 2 另外 我已经使用maven编译器生成了jaxb bean
  • INSERT..RETURNING 在 JOOQ 中不起作用

    我有一个 MariaDB 数据库 我正在尝试在表中插入一行users 它有一个生成的id我想在插入后得到它 我见过this http www jooq org doc 3 8 manual sql building sql statemen
  • 操作错误不会显示在 JSP 上

    我尝试在 Action 类中添加操作错误并将其打印在 JSP 页面上 当发生异常时 它将进入 catch 块并在控制台中打印 插入异常时出错 请联系管理员 在 catch 块中 我添加了它addActionError 我尝试在jsp页面中打
  • 如何为俚语和表情符号构建正则表达式 (regex)

    我需要构建一个正则表达式来匹配俚语 即 lol lmao imo 等 和表情符号 即 P 等 我按照以下示例进行操作http www coderanch com t 497238 java java Regular Expression D
  • 从 127.0.0.1 到 2130706433,然后再返回

    使用标准 Java 库 从 IPV4 地址的点分字符串表示形式获取的最快方法是什么 127 0 0 1 到等效的整数表示 2130706433 相应地 反转所述操作的最快方法是什么 从整数开始2130706433到字符串表示形式 127 0
  • getResourceAsStream() 可以找到 jar 文件之外的文件吗?

    我正在开发一个应用程序 该应用程序使用一个加载配置文件的库 InputStream in getClass getResourceAsStream resource 然后我的应用程序打包在一个 jar文件 如果resource是在里面 ja
  • 加密 JBoss 配置中的敏感信息

    JBoss 中的标准数据源配置要求数据库用户的用户名和密码位于 xxx ds xml 文件中 如果我将数据源定义为 c3p0 mbean 我会遇到同样的问题 是否有标准方法来加密用户和密码 保存密钥的好地方是什么 这当然也与 tomcat
  • Android 中麦克风的后台访问

    是否可以通过 Android 手机上的后台应用程序 服务 持续监控麦克风 我想做的一些想法 不断聆听背景中的声音信号 收到 有趣的 音频信号后 执行一些网络操作 如果前台应用程序需要的话 后台应用程序必须能够智能地放弃对麦克风的访问 除非可
  • 如何从指定日期获取上周五的日期? [复制]

    这个问题在这里已经有答案了 如何找出上一个 上一个 星期五 或指定日期的任何其他日期的日期 public getDateOnDay Date date String dayName 我不会给出答案 先自己尝试一下 但是 也许这些提示可以帮助
  • 在mockito中使用when进行模拟ContextLoader.getCurrentWebApplicationContext()调用。我该怎么做?

    我试图在使用 mockito 时模拟 ContextLoader getCurrentWebApplicationContext 调用 但它无法模拟 here is my source code Mock org springframewo
  • 声明的包“”与预期的包不匹配

    我可以编译并运行我的代码 但 VSCode 中始终显示错误 早些时候有一个弹出窗口 我不记得是什么了 我点击了 全局应用 从那以后一直是这样 Output is there but so is the error The declared
  • 获取 JVM 上所有引导类的列表?

    有一种方法叫做findBootstrapClass对于一个类加载器 如果它是引导的 则返回一个类 有没有办法找到类已经加载了 您可以尝试首先通过例如获取引导类加载器呼叫 ClassLoader bootstrapLoader ClassLo
  • 编译器抱怨“缺少返回语句”,即使不可能达到缺少返回语句的条件

    在下面的方法中 编译器抱怨缺少退货声明即使该方法只有一条路径 并且它包含一个return陈述 抑制错误需要另一个return陈述 public int foo if true return 5 鉴于Java编译器可以识别无限循环 https
  • 在 Maven 依赖项中指定 jar 和 test-jar 类型

    我有一个名为 commons 的项目 其中包含运行时和测试的常见内容 在主项目中 我添加了公共资源的依赖项
  • Firebase 添加新节点

    如何将这些节点放入用户节点中 并创建另一个节点来存储帖子 我的数据库参考 databaseReference child user getUid setValue userInformations 您需要使用以下代码 databaseRef
  • 有没有办法为Java的字符集名称添加别名

    我收到一个异常 埋藏在第 3 方库中 消息如下 java io UnsupportedEncodingException BIG 5 我认为发生这种情况是因为 Java 没有定义这个名称java nio charset Charset Ch
  • 如何修改现有表以添加时区

    我有一个包含 500 多个表的大型应用程序 我必须将应用程序转换为时区感知 当前应用程序使用new java util Date GETDATE 与服务器的时区 即没有任何时区支持 我已将这项任务分为几个步骤 以便于开发 我确定的第一个步骤
  • Spring Boot @ConfigurationProperties 不从环境中检索属性

    我正在使用 Spring Boot 1 2 1 并尝试创建一个 ConfigurationProperties带有验证的bean 如下所示 package com sampleapp import java net URL import j

随机推荐

  • 我可以复制或拦截 Java 中的输出流吗?

    我想拦截标准输出流 然后将内容复制到另一个流 但我也希望保持标准输出流像原来一样 我可以用 Java 实现这一点吗 您可以使用类似示例的内容TeeOutputStream在这里解释编写您自己的 Java I O 流类 基本上 您创建一个 T
  • 目前在 Jupyter/iPython 中动态更新绘图的正确方法是什么?

    在答案中如何在 ipython 笔记本中动态更新循环中的绘图 在一个单元格内 给出了如何在 Python 循环中动态更新 Jupyter Notebook 内的绘图的示例 然而 这是通过在每次迭代中销毁并重新创建绘图来实现的 并且其中一个线
  • 将缺失的日期添加到 pandas 数据框中

    我的数据可以在给定日期有多个事件 也可以在某个日期没有事件 我记录这些事件 按日期计数并绘制它们 然而 当我绘制它们时 我的两个系列并不总是匹配 idx pd date range df simpleDate min df simpleDa
  • 是否存在占用 0 字节的 C++ 类型

    我试图声明一个占用零字节的 C 变量 它在一个联合体中 我从 int 0 类型开始 我不知道这是否实际上是零字节 尽管 sizeof int 0 是 0 我需要一种更好的方法来声明 0 字节类型 并且希望可以将其类型定义为 nullType
  • 无法使用 127.0.0.1 连接到 mysql

    使用以下代码我可以连接到mysql mysql connect localhost username 但如果我改变localhost to 127 0 0 1我收到以下错误 无法连接到 127 0 0 1 上的 MySQL 服务器 13 为
  • 命令行参数的Shell脚本密码安全

    如果我使用密码作为命令行参数 则它在系统上是公开的ps 但是如果我在 bash shell 脚本中并且执行如下操作 somecommand p mypassword 这仍然会出现在进程列表中吗 或者这样安全吗 子流程怎么样 不安全吧 协进程
  • 图库/AdapterView 子可绘制状态

    我正在使用图库视图 其中与每个项目相对应的视图都非常重要 并且由文本和多个按钮组成 当我单击以拖动图库视图 不在按钮之一上的某处 时 按钮的可绘制状态更改为按下 并且看起来好像所有按钮当前都被按下 此外 选定状态也会发生相同的行为 例如 子
  • 轻量级8字节哈希函数算法

    我需要从可变长度字符串中提取 8 字节摘要 因此我正在寻找将在 c c 中实现的算法 这将是微控制器上数字签名过程的一部分 因此它必须是 可以用几行代码编写 因为必须保留尽可能少的固件 资源消耗低 特别是RAM 最好小于100字节 足够强大
  • 如何在 Matlab 中打开 DBase 文件(.DBF)?

    我已经在 Matlab Central 中进行了谷歌搜索 但找不到任何直接在 Matlab 中打开 DBF 文件的方法 TMW File Exchange 中有一些对 DBFREAD 函数的引用 但它不再可用 真的有问题吗 我确实有数据库工
  • 如何从控制器外部访问登录用户?

    我正在使用 SignalR 处理来自客户端对我的 MVC3 应用程序的点击 每次用户单击某些内容时 我都需要验证登录的用户 如果这是在 MVC3 控制器内 我会 if User Identity IsAuthenticated string
  • 如何使用 Firebase 托管部署 Angular 2 应用程序?

    我想知道使用 Firebase 托管部署简单的 Angular 2 应用程序所需的步骤 这些是步骤 1 npm install g firebase tools 这将安装我们将在以下步骤中使用的 firebase CLI Firebase
  • Gfortran:将纯函数视为普通函数以进行调试?

    我需要调试一些pure使用 gfortran 编译的 fortran 程序中的函数 有什么办法可以忽略pure声明 以便我可以使用write print等在这 些pure无需付出很大努力就能发挥作用 不幸的是 仅仅删除它并不容易pure陈述
  • 正则表达式验证字符串仅包含字符(非特殊字符)、空格和数字

    我正在使用 Ruby on Rails 3 0 9 我想验证一个只能包含字符 不是特殊字符 不区分大小写 空格和数字的字符串 在我的验证代码中我有 validates name presence gt true format gt with
  • 使用 MassTransit 使用交换和路由密钥发布消息

    我已经关注 MassTransit 几个星期了 我对它的可能性很好奇 但是 我似乎无法完全正确地理解这些概念 预期行为我想将消息发布到带有路由密钥的 直接 交换 该路由密钥绑定到两个不同的队列以执行其他活动 当我尝试使用 MassTrans
  • 警告:尝试在其视图不在窗口层次结构中的 ViewController 上呈现 ViewController

    我已经查看了相关问题 但没有解决我的问题 我正在尝试使用dismissViewControllerAnimated animated completion and presentViewControllerAnimated animated
  • 如何在使用 slimerjs 在 casperjs 中运行测试脚本时最大化浏览器窗口

    使用 slimerjs 引擎在 casperjs 中运行测试脚本时 我无法查看完整窗口 谁能帮我增加 mozila 浏览器窗口的大小 当然 在 casper 中使用 phantom slimer viewportSize 选项 casper
  • Java 覆盖特定区域设置的区域设置

    我在用着NumberFormat getCurrencyInstance format amount 将货币从 BigDecimal 格式化为字符串 这按预期工作 问题是我们的主要目标是荷兰市场 而默认的荷兰语格式很奇怪 让我解释一下 当格
  • 在我的标签元素上设置 height: 100% 不起作用

    我尝试设置height 100 在标签中 但它不起作用 为什么不 field label color 3E3E3E font weight bold width 80px display block float left margin to
  • “AnyCPU”平台目标上的内存分配模式

    我故意在一个简单的 C 程序中泄漏内存 以了解有关 NET 如何管理这方面的更多信息 这是使用完成的int 数组 每个数组大小为 1000 万 每 100 毫秒声明一次 数组的元素不会被 触及 如分配一个值 以免将数据带入进程的工作集中 c
  • 服务层和控制器:谁负责什么?

    在课堂上 我们现在正在学习如何构建 Spring 应用程序 即使没有直接涉及 Spring 我们也学习了如何为 DAO 和服务层对象创建接口 如果我错了 请纠正我 DAO 层非常抽象 它只包含 CRUD 操作 并进一步用于读取数据 即 获取