讨论:在SSH框架中,是否需要DTO这一层?

JustForFly 发布于 2012/06/29 15:49
阅读 3K+
收藏 2

目前开发的Web项目的框架主要使用了:

Struts2 + Spring + Hibernate

由于Struts2中不再需要ActionForm,在架构师初期设计时,就没有设计 DTO(VO) 这一层,而是用 PO 贯穿整个MVC层。

这样确实可以少写很多setXXX、getXXX的代码(VO和PO的转换),

但是,这样一来,页面上面存在的和数据库无关的属性,都被放到了PO中 (通过标注 @Transient ,使其脱离hibernate的管理)。

个人感觉,这样做违反了高内聚、低耦合的标准。

不知道,大家觉得,在 Struts2 + Spring + Hibernate 的开发环境中是否需要DTO(VO)这一层?

这个没有对错之分,欢迎大家发表一下自己的意见。

加载中
0
翟志军
翟志军

userDao.save(user);这样的代码是面向过程的。

DAO层的出现都是错误

 

翟志军
翟志军
回复 @无知的T : 一样的
ValueError
ValueError
这样如果要测试怎么做 mock ?
彭博
彭博
红薯是这样干的,,,
翟志军
翟志军
回复 @JustForFly : 对
JustForFly
JustForFly
那应该这样:user.save() ?
0
孙丽英
孙丽英

现在很多SSH的架构里面,本身DTO(VO)界限就不是很明显,完全可以用POJO全部代替,无论页面VO还是传递的DTO或是面向数据库的PO。我觉得,还是得看具体情况吧,如果表中数据字段特别多,数据量大,而页面可能需要的字段只有很少一部分,这时候用VO,就可以提高效率了。而对那些想要隐藏数据库结构的系统来说,DTO 也很重要呀,这样能很好的隐藏底层数据结构。

0
AlanSun
AlanSun

如果使用Hibernate做持久,从代码解耦以及未来DB扩展的角度上考虑,虽然编码麻烦一些,但还是建议使用VO。如果使用ibatis做持久层的话,VO就没有太大必要了。另外在使用VO时,大多数时候都不用使用自己做set或get,用copyProperties就ok了,如果很在意性能,可以无视这个。

0
JackyYong
JackyYong
我一般是用PO+VO的形式, VO直接继承PO, 也可以不继承
0
把妹达人老张
把妹达人老张
不知道你说的是啥,也许是贫血模式与富学模式(充血模式)。
0
汪林
汪林

通常都是用vo来接收页面上的参数,再把vo传给po,po里的参数保存到数据库。

0
徐小路
徐小路
虽然我也是做java的,但是现在着实讨厌 po vo  pojo  ssh  xx  oo.现在写java代码写的都恶心了..............
0
景愿
景愿
期待java的 -1.abs();
把妹达人老张
把妹达人老张
Ruby?python?完全对象?
0
Fred
Fred
建议楼主看看领域模型。就会明白。其实对于java来说。什么vo po 都不是重点。不是被web绑票就是被db绑票。设计符合业务的实体对象,才比较科学。凝聚业务才是关键。
0
serenity
serenity

引用来自“孙丽英”的答案

现在很多SSH的架构里面,本身DTO(VO)界限就不是很明显,完全可以用POJO全部代替,无论页面VO还是传递的DTO或是面向数据库的PO。我觉得,还是得看具体情况吧,如果表中数据字段特别多,数据量大,而页面可能需要的字段只有很少一部分,这时候用VO,就可以提高效率了。而对那些想要隐藏数据库结构的系统来说,DTO 也很重要呀,这样能很好的隐藏底层数据结构。

说得不错
返回顶部
顶部