VO(DTO)模式在架构设计中是否需要

青木河 发布于 2014/06/26 16:48
阅读 3K+
收藏 1

最近在做自己的博客后台设计,用的是Jodd,我大jodd V587!!!

以前的公司在做一个项目时,会定义很多概念:VO,BO,PO什么的。。。。。。。

引文

大多数的应用,基于分层架构的:

  • Web层(Struts2 or SpringMVC等)
  • App应用层(Service)
  • Dao层(ORM)
  • DB

DTO(VO):也就是一般意义上的VO,封装后的对象。一般用于Web层—Service层间的数据传输入。

PO:也就是一般概念上的Domain Object,如hibernate 中的Entity.一般用于Service层--Dao层间的数据传输。

大多数web应用是没有VO的,直接PO贯穿 web-service-dao三层;有些应用,尤其企业级应用开发,会用VO。

如果用VO,那么就要涉及到PO和VO之间的转换,增加很多代码量,每层交互都要做对象转换,重复代码多, 增加研发和维护的人力成本。

但vo的作用有两种:

  1. 模块隔离:对外暴露,屏蔽内部实现。
  2. 分布式支持:用于异步传输;

问题来了:

到底用不用VO????

加载中
0
hylent
hylent
坐等评价
0
唯一
唯一
开始的时候不需要,业务pojo可以用,当业务越来越复杂,越来月变态,你会发现改动业务pojo会联动改一堆东西,所以怎么办呢,再写一个vo吧,再写一个vo跟业务pojo转化的方法,这样臃肿的代码就可以继续跑了,不用改很多
0
Beyond-Bit
Beyond-Bit
何不用VO 去继承 PO呢?         这样不需要你所说的转换的各种问题吧。
0
青木河
青木河

引用来自“Beyond-Bit”的评论

何不用VO 去继承 PO呢?         这样不需要你所说的转换的各种问题吧。

--! 你没有理解VO的意义:

1.VO是对前端需要展示数据的封装。VO可以包含PO的所有属性,也可以包含PO的部分属性,也可以包含PO没有的属性。VO以前端展示需要而进行属性的设计。

2.VO是数据传输类,PO是持久类,两个的作用不一样。

3.如果存在继承关系,那么他们俩某种意义上就是有关联的了父子关系了。这与分层思想不符,明显不合适。

0
Beyond-Bit
Beyond-Bit

引用来自“Beyond-Bit”的评论

何不用VO 去继承 PO呢?         这样不需要你所说的转换的各种问题吧。

引用来自“青木河”的评论

--! 你没有理解VO的意义:

1.VO是对前端需要展示数据的封装。VO可以包含PO的所有属性,也可以包含PO的部分属性,也可以包含PO没有的属性。VO以前端展示需要而进行属性的设计。

2.VO是数据传输类,PO是持久类,两个的作用不一样。

3.如果存在继承关系,那么他们俩某种意义上就是有关联的了父子关系了。这与分层思想不符,明显不合适。

我们的架构和你描述的架构基本一致,我们都是通过VO 去继承PO,数据持久层都是PO完成,至于一些扩展以及转换都是VO里面,目前没有发现什么问题。我的理解.
0
一朵气质草
一朵气质草
楼主一直在说po与vo,其实忘记了最重要的一个bo,业务模型bo才是核心,一般情况下,bo和po是必备。关于vo现在已经很少使用了,所谓的java平台的web层的mvc框架已经没有优势了,即使java平台的web项目也会选择html放弃jsp,由于前端框架大部分支持json格式,所以vo的存在与不存在意义不大,个人理解
大内高手
回复 @PengKangde : 3q,mvc思想确是web的最佳解决方案,具体选择什么技术因人而异了
PengKangde
PengKangde
mvc是web的核心架构思想 用不用jsp 只是实现 但mvc架构是当代web架构的最佳方案
0
loyal
loyal
没有必要,map,list足以.
loyal
loyal
回复 @青木河 : 前台该怎么样还怎么样,没有任何影响.
紫电清霜
紫电清霜
回复 @青木河 : 河兄,也没事啊:取值时,只需要对照数据库表里的字段名就可以了。map里的key的名称来自于字段名。再说前台的一般只负责js css。 :)
青木河
青木河
回复 @紫电清霜 : 小电电,不准酱油。map,list对于前后台是同一个人开发来说,好用;万一,前后台不是同一个人呢
紫电清霜
紫电清霜
0
xmut
xmut

① 所谓的VO,一般我是定义成XXXForm,即每个Web表单一个对象。这样做得好处是,不用写一大堆参数名来接收对象属性!

②关于PO一杆到底,个人觉得,如果还像我第一步那样做得话,是否每次都得把PO的其他属性放在表单的隐藏域内,或者写一大堆参数名来接收PO的属性。那万一PO类User里面有一个字段isAdmin,那么你觉得放在表单隐藏域安全吗?当然,你也可以写一大堆参数名来接收这个表单的User其他字段

一点小体会……


返回顶部
顶部