java - MVC 架构 DTO/模型映射/转换

标签 java spring model entity dto

使用 Spring MVC 我们通常会看到 Controller、Service 和 Repository 层。 Repository 层使用 Entity 模型,它与数据库是一对一的映射。我想到了以下 -

  1. Service 层应该使用相同的 Entity 模型吗?
  2. 服务层应该使用单独的域模型吗?如果是,那么往返映射应该在服务层完成吗?
  3. Controller 层我们应该使用相同的 Domain 模型吗?
  4. Controller 层应该使用单独的 DTO 模型吗?如果是,那么往返映射应该在 Controller 层完成?
  5. 我们是否有任何简单的方法可以在不编写太多冗长代码的情况下进行映射?我过去用过几次 Dozer。

这个问题可能有人问过,但我找不到。所以请原谅我重复的问题。

最佳答案

  1. 是的。
  2. 没有。该服务应在 Repository 对象返回的实体模型上工作。
  3. 没有。 Controller 应使用 DTO。 DTO 应包含表单字段和验证注释(如果您使用的是 JSR303)。
  4. 是的。 DTO 在 Controller 层中使用。 DTO 应该公开一个接受实体模型的构造函数。实体模型到 DTO 的转换是在这个构造函数中完成的。实体模型的情况相同。实体模型还应该公开一个重载的构造函数,它接受 DTO 对象作为参数。 DTO 到实体模型的转换应在此处进行。
  5. DTO(实体模型作为参数)和实体模型(DTO 作为参数)的重载构造函数是冗长的。

关于java - MVC 架构 DTO/模型映射/转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34988293/

相关文章:

Magento:如何覆盖本地模块中的模型

java - 异步任务中的 MediaPlayer : finalized without being released

java - Spring Security - 具有 IS_AUTHENTICATED_ANONYMOUSLY 但仍指定(且未知)凭据的 Url 被框架阻止

java - 如何在 Java、XML 文件中显示具有特定 id 和标签名称以及特定父节点下的节点的值?

java - 只允许在 REST API 中使用 PUT 的某些字段(Spring)

java - Spring Data Neo4j 未能通过 junit 测试设置

c# - 当 T 可以是多个 new () 类型时,如何泛化一个方法?

arrays - 尝试从 SwiftUI View 中的嵌套数组调用

java - 带正则表达式的 MaskFormatter

java - 使用 Java JADE 创建多个代理