java - 数据模型的 DTO 是否应该具有仅用于 Java 序列化的原始数据类型?

标签 java class dto datamodel

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

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

Name 是两个字符串的对象 - FirstName 和 LastName,Grade 是一个枚举,Roll number 是两个整数的对象 - 类(class)号和座位号。为了将此数据存储在数据库中,我将此数据序列化为 JSON。

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

最佳答案

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

如果底层框架支持序列化某些非原始类型(大多数现代框架都会支持),我认为您没有任何理由不使用此功能并限制自己仅在 DTO 中使用原始数据类型。

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

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

关于java - 数据模型的 DTO 是否应该具有仅用于 Java 序列化的原始数据类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60586389/

相关文章:

c# - DTO vs VM - 使用还是不使用?

java - 依赖策略

java - 使用 Apache POI 读取 XLSX 文件时出现异常

Java时区错误

java - ViewPagerAdapter 选项卡标题翻译 Android 库 neokree/materialtabs

java - 获取 com.thoughtworks.xstream.converters.ConversionException 将 xml 列表转换为 DTO

java - 如何在 JSF + Spring + Hibernate 中使用 DTO

java - 为什么jaxb会生成这样的代码?

javascript - ES6 类中的构造函数和原型(prototype)中的构造函数之间的区别?

c++ - 为什么我需要在 qt 中进行前向类声明?