我正在开发一个使用SpringMVC,JPA2的简单论坛Web应用程序。 我创建了像用户,论坛,发布等反映数据库表结构的JPA实体。DTOs更好的方法?
但同时显示UI上的数据,我需要一些DTOs,我不能总是抱着要显示在使用实体UI中的数据。
例如:更改密码画面。在这里我需要保留旧密码,新密码和确认新密码。但用户实体不会有旧/新/确认密码字段,它只是密码。所以我需要创建DTO,它们只是Web和服务层之间的数据载体。
我的问题是在创建DTO的对象,应该我把所有的DTO本身或包装在DTO实体,并添加额外的属性所需要的属性?
例:对于编辑用户界面,
public class UserDTO
{
private User user; // User is a JPA entity
// setters & getters
}
有了这个,我可以通过底层的用户实体到我的业务层。但在绑定UI属性到DTO时,我需要关联PropertyEditor。
(或)
public class UserDTO
{
private String userId;
private String userName;
private String password;
// setters & getters
}
用这种方法,我需要转换&复制DTO的属性分为JPA实体,并传递给服务层。
哪种方法更好?还是有没有其他方法完全没有DTO?
但对于像更改密码屏幕或后的屏幕显示列表中的场景与一些聚集results..here我们需要DTOs..right对象? – 2012-07-31 05:43:25
为什么?如果您只需要实体中的一部分数据(您已从数据库中提取数据),那么使用整个实体不会有任何额外开销。如果您还需要其他实体,则可以加载它们并将它们携带到表示层。 – 2012-07-31 05:56:22
对于DataGrid,我必须显示1到25条记录(实体),保留当前页面的内容,总共有多少页面等等。而不是将所有这些细节存储为请求(不管)范围中的单个参数,我认为将它们存储在DTO中会更好。 – 2012-07-31 06:01:11