gpt4 book ai didi

java - 每个实体的 DTO 对象

转载 作者:行者123 更新时间:2023-11-30 04:02:39 26 4
gpt4 key购买 nike

我继承了一个用 Java 编写的应用程序,该应用程序使用 JPA 访问数据库。该应用程序使用了我以前从未遇到过的设计模式,我真的会就为什么使用此模式提供一些指导。与许多应用程序一样,我们有前端、中间件和后端数据库。通过 DAO 访问数据库。 DAO 上的每个方法都会加载一个实体 DTO,它只是一个 POJO,只有 getter 和 setter,然后将该实体 DTO 传递到具有其他更改实体状态的方法的实体本身。示例[更改类名以保护无辜者]

enum Gender
{
Male,
Female
}

class PersonDTO
{
private String mFirstName;
private String mLastName;
private Gender mGender;
...

String getFirstName() { return this.mFirstName; }
String setFirstName(String name) { this.mFirstName = name; }
// etc
}

class Person
{
PersonDTO mDTO;
Person(PersonDTO dto)
{
mDTO = dto;
}

String getFirstName() { return mDTO.getFirstName() }
String setFirstName(String name) { mDTO.setFirstName(name); }
// and so on

void marry( Person aNotherPerson )
{
if( this.getGender()==Gender.Female &&
aNotherPerson.getGender()==Gender.Male)
{
this.setLastName( aNotherPerson.getLastName() );
}
aNotherPerson.marry( this );
}
}

这在 30 个左右的实体类中重复,通过 DTO 翻倍到 60 个,我就是不明白为什么。我了解(位)关于转换的分离,我也了解(位)关于基于 EAO 的设计与基于 Activity 记录的设计之间的差异。

但是事情真的需要走到这一步吗?是否应该始终存在至少一个“DB”对象,除了映射到数据库字段的 getter 和 setter 之外什么都不包含?

最佳答案

免责声明:关于这个主题有不同的观点,并且根据您的系统架构,您可能没有选择。

话虽如此......我以前见过这种模式的实现,但不是它的忠实粉丝,在我看来,它重复了大量的代码,而没有增加任何实际值(value)。它似乎在具有 XML API(如 SOAP)的系统中特别流行,在这些系统中,将 XML 结构直接映射到对象结构可能很困难。在您的特定情况下,情况似乎更糟,因为在重复的 getFirstName()/getLastName() 方法之上,有业务逻辑(属于服务层)直接编码到 pojo (这应该是一个简单的数据传输对象)如 DTO)。为什么pojo应该知道只有异性才能结婚?

为了帮助更好地理解原因,您能否解释一下这些 DTO 从何而来?是否有前端将数据提交到 Controller ,然后将其转换为 DTO,然后使用 DTO 来填充数据?

关于java - 每个实体的 DTO 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21588390/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com