该帖已经被评为良好帖
|
|
---|---|
作者 | 正文 |
发表时间:2011-04-25
最后修改:2011-04-25
VO DTO POJO,都只是数据的封装而已,
如果每层交互都要做对象转换,重复代码多, 除了增加研发和维护的人力成本,意义究竟有多大,值得思考! |
|
返回顶楼 | |
发表时间:2011-04-25
引用 而不能什么都不让他们知道,只是强制执行。
|
|
返回顶楼 | |
发表时间:2011-04-25
star022 写道 VO DTO POJO,都只是数据的封装而已,
如果每层交互都要做对象转换,重复代码多, 除了增加研发和维护的人力成本,意义究竟有多大,值得思考! 如果你看完本文,还不明白为什么要用。我就没有办法了。 |
|
返回顶楼 | |
发表时间:2011-04-26
最后修改:2011-04-26
就问楼主一个问题:OO中的Object与layer之间有啥关系,这个啥关系都没有的道理如搞不清楚,扯那些po,dto,vo都是浮云,浮动在层上的云。
|
|
返回顶楼 | |
发表时间:2011-04-26
最后修改:2011-04-26
peterwei 写道 star022 写道 VO DTO POJO,都只是数据的封装而已,
如果每层交互都要做对象转换,重复代码多, 除了增加研发和维护的人力成本,意义究竟有多大,值得思考! 如果你看完本文,还不明白为什么要用。我就没有办法了。 死读书不如无书,具体问题灵活,灵活对待, 层与层之间的交互,不可能完全断开,就算是层与层之间数据对象转换,也算是一种耦合, 一旦上层数据结构有变动,很有可能会影响到下一层, 如:view层与service层传封装数据的vo或dto增减属性,很有可能会影响到service与dao层封装数据的po, 此时,将vo(dto)、po区分得太清楚,从设计角度看,貌似变清晰了, 而站在研发实际效果来看,是失败的。 站在交互的全流程的角度来看,view<-->service<-->dao,层与层之间的交互的“xo”,只是对数据的封装罢了, 采用统一的对象来处理,从实用主义来说,是合理的,这种应该是大多数情况, 一些特定场景,如“防火墙”、层与层之间,敏感数据隔离等,做有必要的转换,则是有意义的。 Rod Johnson在 J2EE without ejb中是反对用DTO的,他这么反对,相信是有他的道理的。 |
|
返回顶楼 | |
发表时间:2011-04-26
yimlin 写道 vo和po的区别就不多说了。
vo的作用有两种: 1.模块隔离:对外暴露,屏蔽内部实现。 2.分布式支持:用于异步传输; 换句话说: 如果不打算进行严格的模块化/组件化,又没有分布式场景,就不应该使用VO。 如果不打算进行严格的模块化/组件化,但存在部分分布式场景,比如lz所说的flex,那么针对部分进行VO开发即可; 此外,决定是否启用VO除了上述两个作用对应的场景外,另有如下两个因数: 1.PO是否是Rich Model? 2.开发人员是按分层分工还是按功能分工? 如果PO是贫血的,且是按分层分工开发的那么应该启用VO,因为,由于后台模型变化导致前台的调整会带来沟通协调的成本; 如果PO是Rich Model,且是按功能分工,那么就不应使用VO,VO和PO只会趋近,最终带来更多的维护成本,且在Rich Model下只变后台不变前台的比率较低,大部分情况下,功能的调整/改进会同时影响前后台。 +1 |
|
返回顶楼 | |
发表时间:2011-04-26
donglee 写道 peterwei 写道 star022 写道 VO DTO POJO,都只是数据的封装而已,
如果每层交互都要做对象转换,重复代码多, 除了增加研发和维护的人力成本,意义究竟有多大,值得思考! 如果你看完本文,还不明白为什么要用。我就没有办法了。 死读书不如无书,具体问题灵活,灵活对待, 层与层之间的交互,不可能完全断开,就算是层与层之间数据对象转换,也算是一种耦合, 一旦上层数据结构有变动,很有可能会影响到下一层, 如:view层与service层传封装数据的vo或dto增减属性,很有可能会影响到service与dao层封装数据的po, 此时,将vo(dto)、po区分得太清楚,从设计角度看,貌似变清晰了, 而站在研发实际效果来看,是失败的。 站在交互的全流程的角度来看,view<-->service<-->dao,层与层之间的交互的“xo”,只是对数据的封装罢了, 采用统一的对象来处理,从实用主义来说,是合理的,这种应该是大多数情况, 一些特定场景,如“防火墙”、层与层之间,敏感数据隔离等,做有必要的转换,则是有意义的。 Rod Johnson在 J2EE without ejb中是反对用DTO的,他这么反对,相信是有他的道理的。 关于Rod大叔反对,前面楼上有人说我们是断章取义了。哈哈。你可以了解一下。 |
|
返回顶楼 | |
发表时间:2011-04-26
从本质上讲,一般的系统,需要的只是从数据库到界面的一种映射,所以,原始的简单系统是jsp+sql来处理。 但是sql还是比较复杂的,加入了po作为数据库的代理,让这种复杂度的范围尽量缩小 而po和界面间的转换,并没有这种复杂度,加入vo很可能不能减少复杂度,反而增加复杂度。我觉得po和界面间,只需要定义好映射规则,就可以足够清晰了。 |
|
返回顶楼 | |
发表时间:2011-04-26
gtssgtss 写道 从本质上讲,一般的系统,需要的只是从数据库到界面的一种映射,所以,原始的简单系统是jsp+sql来处理。 但是sql还是比较复杂的,加入了po作为数据库的代理,让这种复杂度的范围尽量缩小 而po和界面间的转换,并没有这种复杂度,加入vo很可能不能减少复杂度,反而增加复杂度。我觉得po和界面间,只需要定义好映射规则,就可以足够清晰了。 是这样的。我们大多数项目,都是PO透传所有层。并不需要VO.但一些特定的项目还是需要的,就如我所说的:为什么要用DTO(VO)。 |
|
返回顶楼 | |
发表时间:2011-04-26
star022 写道 VO DTO POJO,都只是数据的封装而已,
如果每层交互都要做对象转换,重复代码多, 除了增加研发和维护的人力成本,意义究竟有多大,值得思考! 我往往会找一些工具,或者自己扩展一些插件来完成这样的转换 比如 pojo对象转换成dto对象 我运用到了beanutils和注解形式自己写了个工具,转换也只是一行代码而已 User user = ...... UserDTO uDTO = MyBeanUtils.convert(user,UserDTO.class); List<User> userList = ..... List<UserDTO> userDTOList = MyBeanUtils.convertList(userList,UserDTO.class); |
|
返回顶楼 | |