为什么需要 dto 映射器?例如模型映射器。在所有示例中,dto 和实体类都是相同的。如果你需要给json的字段与模型不同,你还需要写映射,那为什么还要使用库呢?有什么好处?例如
{
"data": [
{
"id": 2,
"name": "Иванов Иван Ильич",
"status": "Председатель",
"filter": [
"дирекция"
],
"phones": [],
"email": [
"Ism@ya.ru",
"aIB@mail.ru"
],
"image": "Ivanoff828",
"thumbImage": "Ivanoff64"
},
{
"id": 14,
"name": "Петров Петр Анатольевич",
"status": "Заместитель",
"filter": [
"дирекция",
"совет"
],
"phones": [],
"email": [
"Sh@ya.ru",
"sv@mail.ru"
],
"image": "Sh828",
"thumbImage": "Sh64"
}
}
实体由类描述
@Entity
public class Contact extends BaseEntity {
private String surname;
private String name;
private String patronymic;
@OneToMany(mappedBy = "contact", orphanRemoval = true, fetch = FetchType.EAGER)
private Set<Phone> phones = new LinkedHashSet<>();
@OneToMany(mappedBy = "contact", orphanRemoval = true, fetch = FetchType.EAGER)
private Set<Email> emails = new LinkedHashSet<>();
private String position;
private String organisation;
}
@Entity
public class Email extends BaseEntity {
private String email;
@ManyToOne
@JoinColumn(name = "contact_id")
private Contact contact;
}
@Entity
public class Phone extends BaseEntity {
private String number;
private String type;
@ManyToOne
@JoinColumn(name = "contact_id")
private Contact contact;
}
在这种情况下使用现成的 dto 映射器是否有意义,还是自己编写更好?
DTO
在字段和DAO
对象的名称相同的情况下,库允许您摆脱编写冗余代码。如果你看一下库
MapStruct
,你会发现你不能编写自定义转换器,但只能在使用注释时,映射对象。例子:
在企业 Java 世界中,
DTO
对象被用来序列化数据并在系统之间传输,并相应地反序列化回对象,也就是说,它们是数据传输对象。DTO
对象不包含行为,也不包含业务逻辑方法。现在我们可以把它说
DAO
成一个单独的对象,它是一个反映数据的对象,例如数据库,通常情况下可以包含行为,即有任何方法来管理这个对象的状态或有业务逻辑.为什么有
DAO
和DTO
?分担责任,仅此而已。