【问题标题】:Should the DTO of a datamodel have primitive Data types only for serialization in Java?数据模型的 DTO 是否应该具有仅用于 Java 序列化的原始数据类型?
【发布时间】:2020-06-20 12:09:52
【问题描述】:

我创建了一个数据模型 Student 如下:

class Student {
private final Name name;
private final Grade finalGrade;
private final Roll rollnumber;
}

Name 是两个字符串的对象 - firstName 和 lastName,Grade 是一个枚举,Roll number 是两个整数的对象 - 班级号和座位号。为了将这些数据存储在 DB 中,我将这些数据序列化为 JSON。

所以我创建了一个 DTO。所以我的问题是,DTO 是否也可以具有相同的对象 Name、Grade 和 Roll,还是应该采用原始数据类型?

【问题讨论】:

    标签: java class dto datamodel


    【解决方案1】:

    如果您使用原语,将 DTO 映射到 DB 列会更容易!

    但是,如果您打算存储数据模型的 Json,那么您可以继续使用数据模型本身

    【讨论】:

    • 我认为您混淆了将数据从业务逻辑传输到前端的 DTO(数据传输对象)和用于持久化的 DO(数据对象)的概念。所以你通常不会将 DTO 映射到 DB 列,这是 DO 的工作。
    • @UwePlonus 在我的实践中......我一直在这两个地方使用 DTO。让我进一步阅读此内容,然后将与您进一步交换cmets!感谢您的信息!
    • @UwePlonus 无法找到有关此的材料.. 请提供。谢谢!
    • en.wikipedia.org/wiki/Data_transfer_object 中解释了 DTO,并解释了与业务对象 (en.wikipedia.org/wiki/Business_object) 的区别。我已经将数据对象作为名称而不是业务对象来学习。这是唯一的区别。
    【解决方案2】:

    DTO 的目的是用来打包一些数据以通过网络传输到其他客户端/系统。一种流行的用例是 WEB API。所以以 JSON WEB API 为例,DTO 的结构主要取决于你的 API 响应体结构和你用来将 DTO 序列化为 JSON 的底层框架的能力。

    如果底层框架支持对某些非原始类型进行 serailizing(大多数现代框架支持),我看不出有任何理由说明您不使用此功能并限制自己仅在 DTO 中使用原始数据类型。

    例如,在 DTO 中包含 LocalDateTime 是很常见的,然后框架将序列化为有效的 ISO 8601 数据字符串,例如 2020-04-23T11:11:12.511Z。更不用说在 DTO 中包含 List / Set 了。

    如果你限制自己只在 DTO 中使用原始类型,这在某种程度上意味着 JSON 响应中的所有内容都将被展平,并且没有更多的嵌套结构。在一个非常简单的情况下可能没问题,但不是这样当你的数据模型更丰富一点时很好,可以用一些嵌套结构更好地表达。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-21
      • 2011-09-04
      • 2020-05-10
      • 2013-06-01
      相关资源
      最近更新 更多