`
凤舞凰扬
  • 浏览: 66931 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

VO , 我们不需要么?

    博客分类:
  • Java
阅读更多
这两天,在视线论坛就VO与PO的问题发了很多帖子,也看了一些网友的BLOG,围绕这个问题,大家你来我往了许久,许多的程序员或者设计人员,最擅长的是问这样做有什么好处,最喜欢的是反对是提出疑义,而不是去理解为什么要这样,原因是什么?所以兴致来了,就记录一下自己的感受和心态。
   DTO,一个衍生于VO的副产品,一个来自J2EE核心模式的一部分。其实它更多的只是描述了VO中的一部分职能:数据传输。它出现的目的是为了降低对数据存储的访问。如果单纯从DTO的角度去探讨其与PO的关系和作用,倒是仁者见仁,智者见智了。
   我想说的,是VO ,除了DTO描述的一部分外,它更为重要地是反映业务实体,反映客户(交互的人或者系统)所需要看到的对象。正因为在设计上业务实体与物理实体的分离,也就自然导致了VO与PO是两个完全不同的概念。很多网友都喜欢拘泥于他们中涵盖了似乎相同的字段,而这又能说明什么呢?(因为从理论上讲,PO与VO的字段是完全可以不同的)。我们讨论架构中多层的应用的时候,是怎么区分各层的呢?其实框架间和层之间的隔离是依靠两种:功能接口与通信介质。VO就是业务层与相邻各层的通信介质及数据表现介质。正因为有了VO的出现,就将业务实体的反映与界面表现的反映以及物理存储实体的反映隔离开来,也就真正实现了层的概念。否则,一通到底,还叫什么多层应用?(当然,那也许是一个好的web应用,但绝对称不上是一个多层架构应用的)。业务实体和物理实体间的关系是不确定的,业务实体取决于客观的业务情况,而物理实体就是取决与设计人员了。一个业务实体也许只是一个物理实体的部分(比如说我们看到一个人的简介的时候,是不包括人的全部信息的),一个业务实体也许和一个物理实体相同(比如说,一个人员信息的业务表现和物理表现一般都是相同的),一个业务实体也许包含(准确地讲应该是来自于)多个物理实体(比如说,一个订单,包括货币,客户,物品等各种各样的实体信息)。更为简单地讲,就是客户需要看到汽车(业务实体),而不需要了解汽车中的零配件(物理实体)是来自于何处。
    这样说来,VO的好处和作用已经相当明显了,它根本就不是PO所能代替和作用的(表面上看它起了简化的作用,实质上增加了系统间的耦合性,除非,作者对这种耦合性闭而不见),那么,VO,我们不需要么?
    采用多层的架构,我们必然会失去一些东西,如果这些东西不值得(比如就像某些文章说的“永远”不会存在什么分布式的时候),那么盲目地使用这样的架构是不太可取的;但是,如果在构建一个大型,稳健,具有高度扩展性的系统的时候,失去一些东西是需要的(比如说对象间相互数据转换的代销)。
分享到:
评论
3 楼 zhangskills 2010-03-03  
正在学习Java,对分层传值的概念有太多的疑惑和不懂,看了你下凰兄当年的回复的那个论坛,默默地从04年5月读到06年8月,真的觉得很有帮助。佩服你的雅量,也佩服你的高谈,呵呵
2 楼 czwlucky 2008-01-10  
我曾经在不了解这些概念之前就已经用到VO了,不过后来发现这样也挺麻烦的。我一直用DWR做开发,放多工作可以放到客户端来做,比如:一个人的信息,包括基本信息,部门相关信息等,这是两种信息的组合才能形成的,我可以组装好一个完整的信息给客户端发过去,也可以将他们一股脑的发过去,组装?到页面上去做吧!
现在看到这些东西,我才发觉,我开始担心啦,会不会以后出现大麻烦呀?这样做安不安全呀?请赐教!谢谢!czwlucky@163.com
1 楼 lovevirus 2006-10-06  
很有启发,我对vo的感觉和你一样,不过在简单的项目中是一个累赘,但是我一直用着他,因为我觉得如果业务复杂了,对vo越来越重要,基本上是业务的逻辑

相关推荐

    海思3531A_虚拟VO调试.doc

    在进行虚拟VO调试时,我们需要关注以下几个关键知识点: 1. **虚拟VO设备号与图层绑定**: 在海思3531A平台中,虚拟VO设备号范围为3至6,这意味着有四个虚拟VO接口可用于视频叠加。在调试过程中,通常会将虚拟VO...

    po与vo区别.doc

    - PO可能需要主键标识,但VO不一定。 - PO和VO的构造方法、继承性等设计细节可能因项目需求而异。 了解并正确使用PO和VO可以帮助我们更好地组织代码,提高代码的可维护性和可扩展性。在实际开发中,应根据项目需求...

    jsp VO 循环显示

    创建VO对象时,我们可以定义一个Java类,包含需要展示的属性,并提供getter和setter方法以便访问这些属性。 接下来,我们来看看如何在JSP中循环显示VO数据。在JSP页面中,可以使用JSTL(JavaServer Pages Standard ...

    别再用 BeanUtils 了,这款 PO VO DTO 转换神器不香么?.zip

    计算机技术、IT咨询、人工智能AI理论介绍,学习参考资料计算机技术、IT咨询、人工智能AI理论介绍,学习参考资料计算机技术、IT咨询、人工智能AI理论介绍,学习参考资料计算机技术、IT咨询、人工智能AI理论介绍,学习...

    JAVA中的POJO、VO、PO、DO、DTO都是什么?有什么区别?

    在Java开发中,我们经常会遇到各种各样的对象类型,这些对象有着特定的用途和命名约定。以下是关于POJO、VO、PO、DO、DTO的详细解释及其区别。 1. POJO(Plain Old Java Object):POJO是一个通用术语,指没有特定...

    论文研究-J2EE平台下动态自定义VO设计与实现.pdf

    - 业务对象和数据访问对象的封装:研究中的VO设计不仅仅局限于数据对象,还包括业务对象和数据访问对象的封装。这表示VO不仅能够承载数据状态,还能封装业务逻辑和数据访问逻辑。 - 表格模型(TableModel)和动态...

    nc57保存VO的几种方法

    根据提供的文件信息,我们可以总结出nc57保存VO(Value Object)的几种方法。下面将对这些方法进行详细的解析。 ### 方法一:设置VO的状态与主键 在第一种方法中,通过设置`courseSVO[i]`的状态和主键来实现保存。...

    vopo转换工具类及所需jar

    在IT行业中,我们经常需要处理各种数据转换任务,特别是在Java编程环境下。"vopo转换工具类及所需jar"是一个特定的项目,它提供了一个简单的方法来处理名为"vopo"的数据格式之间的转换。这个工具包可能包含了一些...

    扩展MyBatisPlus代码生成器实现自定义源码生成,可生成前端页面、vo对象、dto对象等代码

    然而,对于VO对象、DTO对象以及前端Vue页面等非预置的代码生成需求,就需要我们对默认的代码生成器进行扩展和定制。 在MyBatisPlus 3.5.3版本中,代码生成器主要有两种类:`AutoGenerator`和`FastAutoGenerator`。`...

    视图对象(VO、DTO)的应用!

    当需要跨网络传输大量数据时,直接传输数据库实体可能会涉及到安全问题,而且实体对象可能包含了不应该暴露给调用方的内部状态。DTO就是为此而生,它仅包含需要传输的必要字段,不包含任何业务逻辑。例如,在微服务...

    Oracle 自动生成POVO工具

    而VO类类似于POJO,但更注重于数据的传递,通常不包含任何业务逻辑或数据库操作。在大型项目中,当数据库表数量庞大时,手动创建这些类会变得非常耗时。这时,Oracle POVO工具就显得尤为重要。 该工具的运行非常...

    po vo dto bo to

    - VO对象的生命周期与具体的业务流程相关,不受数据库连接的限制。 #### 四、TO (Transfer Object) 数据传输对象 **定义:** - TO主要用于在不同的系统组件或服务之间传输数据。 - TO常常用于Web服务或者分布式...

    根据vo生成yapi文档:YapiFileGenerattor.zip

    首先,我们需要理解VO类。在软件开发中,VO是一种数据传输对象,通常用于在不同组件或层之间传递数据,不包含任何业务逻辑。在Java中,一个VO类可能包含多个属性,每个属性都有其数据类型和描述。YapiFileGenerattor...

    Vo Lam 3 abc

    由于信息有限,我们需要依赖其他资源来获取更详细的信息,例如游戏的官方公告、社区论坛或玩家反馈。 【标签】"volam"直接与游戏名相关联,强化了我们之前的推断,即这个压缩包内容与"Vo Lam Truyen Ky 3"游戏有关...

    开启虚拟VO

    在海思3531芯片上,通过开启这一功能,可以获取并处理所有屏幕的画面内容,这包括但不限于主屏幕、子屏幕以及可能存在的虚拟屏幕。这意味着用户可以同时处理多个视频源,例如在一台设备上同时播放多个视频流,或者将...

    vo-aacenc-0.1.3.tar

    在本文中,我们将深入探讨如何使用FFmpeg,特别是与`vo-aacenc`相关的部分,来搭建和使用这个工具。`vo-aacenc`是用于AAC(Advanced Audio Codec)音频编码的一个高质量编码器。 首先,让我们了解AAC编码的重要性。...

    Java的几种对象(PO-VO-DAO-BO-POJO)解释

    - **VO**对象不需要实现序列化接口,而**PO**对象通常需要实现序列化接口。 总结来说,PO-VO-DAO-BO-POJO这些概念在Java开发中非常常见,每种类型的对象都有其特定的作用和应用场景。理解这些概念有助于更好地设计...

    Java的(PO,VO,TO,BO,DAO,POJO)解释

    VO也是仅仅包含数据的对象,但它可以和表对应,也可以不对应,这根据业务的需要。VO和PO相似,但VO更像是抽象出的业务对象。VO在Web上传递中也可以和DTO(数据传输对象)混淆,但它们之间有一些细微的区别。 TO...

    Laravel开发-laravel-vo

    在Laravel框架中,"Value Object"(值对象)是一种设计模式,用于封装那些具有特定值的数据,强调的是数据的不可变性。在本项目"Laravel开发-laravel-vo"中,开发者旨在深入探讨如何在Laravel应用中有效地使用值对象...

    VO / DTO / BO / ORM DAO entity DO PO/ POJO(分层领域模型规约)整理

    - **应用场景**:当需要展示给用户的信息与服务层处理的数据不完全一致时使用。 - **优势**: - 可以避免敏感信息泄露给前端。 - 更好的控制展示给用户的界面数据。 ##### 3. BO (Business Object) - **定义**:...

Global site tag (gtag.js) - Google Analytics