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

2023-11-25

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

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

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

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

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

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


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

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

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

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

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

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

  • Java 延迟/等待

    如何将 while 循环延迟到 1 秒间隔 而不减慢其运行的整个代码 计算机的速度到一秒延迟 只是一个小循环 Thread sleep 1000 do nothing for 1000 miliseconds 1 second
  • 确定列表编号是否连续

    我在 Java 工作 我有一个无序列表 包含 5 个数字 范围从 0 100 没有重复 我想检测其中 3 个数字是否连续且没有间隙 例子 9 12 13 11 10 true 17 1 2 3 5 true 19 22 23 27 55 f
  • 如何在异常处理程序中访问访问请求主体

    我们有一个 Spring Boot 应用程序 我们的控制器期望在我们的端点之一中有一个 XML 文档元素 PostMapping value api v1 do stuff consumes APPLICATION XML VALUE pr
  • 将 Java 3D 坐标转换为 2D 屏幕坐标

    我正在使用一个名为 Walrus 的 Java 3D 应用程序 该应用程序用于显示有向图 该代码已经具有突出显示节点并在给定其屏幕坐标的情况下在图形中相邻绘制标签的功能 旋转屏幕后 该节点不再突出显示 我所拥有的是 3D 中的节点坐标 我需
  • 写入作为 Jar 文件中的资源包含的 Java 属性文件

    有没有办法修改作为资源存储在 Jar 文件中的属性文件中的属性值 这就是我正在尝试处理的场景 我有一个属性文件作为资源存储在我的 Jar 文件中 有一些系统特定的属性 例如路径 我希望能够为我想要运行 Jar 文件的系统更改此设置 最好的解
  • Java Sound可以用来控制系统音量吗?

    Java 声音优惠FloatControl各种声音线路功能的实例 以及MASTER GAIN http docs oracle com javase 7 docs api javax sound sampled FloatControl T
  • 如何从 Jackson 中的自定义解串器调用默认解串器

    我在杰克逊的自定义解串器有问题 我想访问默认序列化器来填充我要反序列化的对象 在填充之后 我将做一些自定义的事情 但首先我想使用默认的 Jackson 行为反序列化对象 这是我目前拥有的代码 public class UserEventDe
  • Spring Security登录返回404

    我目前正在使用 Spring 框架开发我的博客 我正在实现 Spring Security 用于登录目的 一切都按预期进行 直到我提交始终返回 404 代码的登录凭据 这是我的 web xml 代码e
  • 使用 java 中的准备好的语句插入自定义 SQL 类型

    我有一些自定义类型 它们基本上都是枚举 以下是它们的外观示例 CREATE TYPE card suit AS ENUM spades clubs hearts diamonds 我在 Java 中有一些准备好的语句 看起来像这样 Setu
  • Spring 非托管 bean 的依赖注入

    我有一个非托管的 JPA 域类 它是通过实例化的new操作员 UserAccount account new UserAccount userRepository save account In my UserAccount类 我有一个be
  • 如何在不打开浏览器的情况下查看 Android 应用程序中的网页?

    嘿 我正在开发一个 Android 应用程序 我想连接到该应用程序内的网络 不过 我在某种程度上尝试过 WebView 但它在我的目录中显示的文件很好 但当连接到 google com 时 它显示错误 然后我添加了这个文件
  • 码头无故停止

    我需要经验丰富的码头用户的建议 我在负载均衡器 亚马逊云 后面维护着 2 台 Linux 机器 使用 Jetty 9 0 3 有时我的 Jetty 容器会被 Thread 2 无故关闭 同时地 显示以下日志并且容器无故停止 没有错误 没有例
  • 如何在 Struts 2 中访问 OGNL 跟踪评估?

    有人告诉我要优化网络应用程序 为此 我使用JProfiler https www ej technologies com products jprofiler overview html 我注意到很大一部分响应时间都花在了表示层上 特别是当
  • JS 中的 .Jar 文件

    有谁知道如何在 JS 中访问 jar 文件 我已经用 Java 创建了类并作为 jar 文件导入 我想从 JS 文件访问该类 大家好 我感谢你们所有人 我尝试在 Firefox XUL 中使用 JS 列出文件夹中的文件 但我做不到 然后我决
  • 在大画布上滚动

    我需要一些帮助来了解滚动绘制到 Android 画布上的项目的基础知识 假设我想创建一个时间线 其中 0 处的时间是可视化的顶部 并且随着时间的增加 时间线继续呈现在上一个点下方 如果我想在 Android 上渲染它 我知道我可以通过重写
  • 有没有办法防止 Spring Boot 覆盖 bean?

    与春天的抽象可刷新应用程序上下文 http docs spring io spring docs current javadoc api org springframework context support AbstractRefresh
  • 未找到 GroovyEvaluator

    我会尝试在以下位置制作我的 PIE 3D 报告iReport 在我的 struts xml 中 我用这个来调用我的报告
  • 如何组织课程、课程包[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 您如何决定包名称应该是什么以及什么类应该放入哪个包中 我正在开发一个项目 在该项目中 我不断添加 删除类 并且不确定我是否需要一个新包 或者应该将其添
  • JAVAFX 缩放、ScrollPane 滚动

    I have JAVAFX application with zoom and scale as described here Scale at pivot point in an already scaled node https sta
  • 只有创建视图层次结构的原始线程才能触摸其视图。在安卓上[重复]

    这个问题在这里已经有答案了 我只是一个初学者 所以请原谅我问一个可能愚蠢的问题 我不明白只有创建视图层次结构的原始线程才能触摸其视图的含义 请有人告诉我为什么会发生此错误以及如何解决此问题 ThankYou 这是我的班级 public cl

随机推荐

  • 我可以复制或拦截 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 操作 并进一步用于读取数据 即 获取