我正在使用 SpringMVC、JPA2 开发一个简单的论坛 Web 应用程序。我创建了反映数据库表结构的 JPA 实体,如用户、论坛、帖子等。
但是在 UI 上显示数据时,我需要 DTO,因为我不能总是使用实体来保存要在 UI 上显示的数据。
例如:更改密码屏幕。在这里我需要保存旧密码、新密码和确认新密码。但是用户实体不会有旧/新/确认密码字段,它只有密码。所以我需要创建 DTO,它们只是 Web 和服务层之间的数据载体。
我的问题是在创建 DTO 对象时,我应该将所有属性放在 DTO 本身中还是将实体包装在 DTO 中并添加所需的其他属性?
例如:对于编辑用户屏幕,
public class UserDTO
{
private User user; // User is a JPA entity
// setters & getters
}
有了这个,我可以将底层用户实体传递给我的服务层。但是在将 UI 属性绑定到 DTO 时,我需要关联 PropertyEditors。
(或者)
public class UserDTO
{
private String userId;
private String userName;
private String password;
// setters & getters
}
使用这种方法,我需要将 DTO 属性转换并复制到 JPA 实体中并传递给服务层。
哪种方法更好?或者有没有其他完全没有 DTO 的方法?