【发布时间】:2014-02-05 21:00:00
【问题描述】:
我继承了一个用 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 个,我就是不明白为什么。我了解 (bits) 关于 converns 的分离,并且我也了解 (bits) 基于 EAO 的设计与基于活动记录的设计之间的区别。
但它真的必须走这么远吗?是否总是至少有一个“DB”对象只包含映射到 DB 字段的 getter 和 setter?
【问题讨论】:
标签: java entity-framework design-patterns jpa dto