数据模型的 DTO 是否应该具有仅用于 Java 序列化的原始数据类型?
Should the DTO of a datamodel have primitive Data types only for serialization in Java?
我创建了一个 Student 数据模型如下:
class Student {
private final Name name;
private final Grade finalGrade;
private final Roll rollnumber;
}
Name 是两个字符串的对象 - firstName 和 lastName,Grade 是一个枚举,Roll number 是两个整数的对象 - class number 和 seat number。为了将此数据存储在数据库中,我将此数据序列化为 JSON。
所以我创建了一个 DTO。所以我的问题是,DTO 是否也可以有相同的对象 Name、Grade 和 Roll 还是应该是原始数据类型?
如果您使用基元,将 DTO 映射到数据库列会更容易!
但是,如果您打算存储 Json 数据模型,那么您可以继续处理数据模型本身
DTO 的目的是用来打包一些数据,以便通过网络传输到其他 clients/systems。一个流行的用例是 WEB API 。所以以JSONWEBAPI为例,DTO的结构主要取决于你的API响应体结构和你用来序列化DTO的底层框架的能力JSON.
如果底层框架支持序列化某些非原始类型(大多数现代框架都支持),我看不出有任何理由让您不使用此功能并限制自己仅在 DTO 中使用原始数据类型。
例如,在 DTO 中包含一个 LocalDateTime
是很常见的,然后框架将序列化为有效的 ISO 8601 数据字符串,例如 2020-04-23T11:11:12.511Z
。更不用说在 DTO 中包含 List
/ Set
了。
如果您限制自己只在 DTO 中使用原始类型,这在某种程度上意味着 JSON 响应中的所有内容都将变平并且不再有嵌套 structure.It 可能没问题在一个非常简单的情况下,但当你的数据模型稍微丰富一点时就不太好了,可以用一些嵌套结构更好地表达。
我创建了一个 Student 数据模型如下:
class Student {
private final Name name;
private final Grade finalGrade;
private final Roll rollnumber;
}
Name 是两个字符串的对象 - firstName 和 lastName,Grade 是一个枚举,Roll number 是两个整数的对象 - class number 和 seat number。为了将此数据存储在数据库中,我将此数据序列化为 JSON。
所以我创建了一个 DTO。所以我的问题是,DTO 是否也可以有相同的对象 Name、Grade 和 Roll 还是应该是原始数据类型?
如果您使用基元,将 DTO 映射到数据库列会更容易!
但是,如果您打算存储 Json 数据模型,那么您可以继续处理数据模型本身
DTO 的目的是用来打包一些数据,以便通过网络传输到其他 clients/systems。一个流行的用例是 WEB API 。所以以JSONWEBAPI为例,DTO的结构主要取决于你的API响应体结构和你用来序列化DTO的底层框架的能力JSON.
如果底层框架支持序列化某些非原始类型(大多数现代框架都支持),我看不出有任何理由让您不使用此功能并限制自己仅在 DTO 中使用原始数据类型。
例如,在 DTO 中包含一个 LocalDateTime
是很常见的,然后框架将序列化为有效的 ISO 8601 数据字符串,例如 2020-04-23T11:11:12.511Z
。更不用说在 DTO 中包含 List
/ Set
了。
如果您限制自己只在 DTO 中使用原始类型,这在某种程度上意味着 JSON 响应中的所有内容都将变平并且不再有嵌套 structure.It 可能没问题在一个非常简单的情况下,但当你的数据模型稍微丰富一点时就不太好了,可以用一些嵌套结构更好地表达。