java - 服务层和 Controller : who takes care of what?

标签 java spring architecture business-logic

在类里面,我们现在正在学习如何构建 Spring 应用程序,尽管 Spring 没有直接参与,但我们学习了如何为 DAO 和服务层对象制作接口(interface)。

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

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

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

假设我有一个对象“ child ” 它有:NameSurNameGenderPhotoBirthdate 字段。 我将如何命名服务?或者你会让 Controller 负责验证,这对我来说似乎不正确。另一方面,将需要调用的每个 setter 委托(delegate)给服务层似乎也不正确。

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

最佳答案

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

我试图限制 Controller 做与验证 http 参数相关的工作,决定使用什么参数调用什么服务方法,在 httpsession 或请求中放入什么,重定向或转发到什么 View ,或类似的 web 相关的东西.

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

Controller 包含网络框架基础设施代码,服务包含应用程序逻辑代码。

关于java - 服务层和 Controller : who takes care of what?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3885675/

相关文章:

java - 如何从 Firebase 实时数据库获取数据并将其显示在微调器中?

java - Spring 注入(inject)映射问题

json - kotlin 数据类 HttpMessageNotReadableException

asp.net - 使用 ASP.net Web API 作为服务层好吗?

php - 100% 定制的多用户 MySQL 组织策略

java - 显示为空白框的 java 程序的 UI 组件

java - 在 Java 中使用 DigestInputStream 时出现奇怪的循环

java - 如何在 JSON 中写入编码流并在 ajax 中检索回来?

java - Liquibase 是否在 Spring Boot 应用程序中注册所有 bean 之前运行?

architecture - 如何设计架构以在 Redis 中实现适当的数据分离而不产生数十个 Redis 实例并能够扩展