这两天,在视线论坛就VO与PO的问题发了很多帖子,也看了一些网友的BLOG,围绕这个问题,大家你来我往了许久,许多的程序员或者设计人员,最擅长的是问这样做有什么好处,最喜欢的是反对是提出疑义,而不是去理解为什么要这样,原因是什么?所以兴致来了,就记录一下自己的感受和心态。
DTO,一个衍生于VO的副产品,一个来自J2EE核心模式的一部分。其实它更多的只是描述了VO中的一部分职能:数据传输。它出现的目的是为了降低对数据存储的访问。如果单纯从DTO的角度去探讨其与PO的关系和作用,倒是仁者见仁,智者见智了。
我想说的,是VO ,除了DTO描述的一部分外,它更为重要地是反映业务实体,反映客户(交互的人或者系统)所需要看到的对象。正因为在设计上业务实体与物理实体的分离,也就自然导致了VO与PO是两个完全不同的概念。很多网友都喜欢拘泥于他们中涵盖了似乎相同的字段,而这又能说明什么呢?(因为从理论上讲,PO与VO的字段是完全可以不同的)。我们讨论架构中多层的应用的时候,是怎么区分各层的呢?其实框架间和层之间的隔离是依靠两种:功能接口与通信介质。VO就是业务层与相邻各层的通信介质及数据表现介质。正因为有了VO的出现,就将业务实体的反映与界面表现的反映以及物理存储实体的反映隔离开来,也就真正实现了层的概念。否则,一通到底,还叫什么多层应用?(当然,那也许是一个好的web应用,但绝对称不上是一个多层架构应用的)。业务实体和物理实体间的关系是不确定的,业务实体取决于客观的业务情况,而物理实体就是取决与设计人员了。一个业务实体也许只是一个物理实体的部分(比如说我们看到一个人的简介的时候,是不包括人的全部信息的),一个业务实体也许和一个物理实体相同(比如说,一个人员信息的业务表现和物理表现一般都是相同的),一个业务实体也许包含(准确地讲应该是来自于)多个物理实体(比如说,一个订单,包括货币,客户,物品等各种各样的实体信息)。更为简单地讲,就是客户需要看到汽车(业务实体),而不需要了解汽车中的零配件(物理实体)是来自于何处。
这样说来,VO的好处和作用已经相当明显了,它根本就不是PO所能代替和作用的(表面上看它起了简化的作用,实质上增加了系统间的耦合性,除非,作者对这种耦合性闭而不见),那么,VO,我们不需要么?
采用多层的架构,我们必然会失去一些东西,如果这些东西不值得(比如就像某些文章说的“永远”不会存在什么分布式的时候),那么盲目地使用这样的架构是不太可取的;但是,如果在构建一个大型,稳健,具有高度扩展性的系统的时候,失去一些东西是需要的(比如说对象间相互数据转换的代销)。
分享到:
相关推荐
nc57保存VO的几种方法sdafsgsfgddsddfsfddfdewdddfdfdfdfa
如果想生成未预置的代码,如vo对象、前端vue页面以及其他自定义代码等,需要做一些定制和扩展来实现。 从使用角度而言,官方资料介绍得比较简要,要实际使用,仍然需要进行具体的尝试和摸索,包括必要时看下源码...
后台VO转换的基类nc.bs.pf.change.VOConversion 检查引用类nc.bs.trade.comchkref.CheckRef 业务异常nc.vo.pub.BusinessException类 第二节 开发问题集 UI工厂分为哪几大基本模块? 怎样配置eclipse参数? 单据开发...
jsp上使用object[]看不懂吧?写vo太烦琐了?ok,都交给map吧、本工具类的使命就是让map代替所有的vo,让编程变得更美好。 附有详细的使用例子。 java精英团队十年编程精华。
为mplayer写的一个新的VO,使用QT的Qimage, 使用信号量控制共享内存的传输。
前端是可视里程表(VO),它根据相邻图像的信息粗略估计摄像机的运动,并为后端提供良好的初始值.VO的实现方法可分为两类:是否提取特征:基于特征点的方法和不具有特征点的直接方法。 基于特征点的VO稳定且对照明和...
Forvo下载器 该模块可用于从 Forvo 检索特定单词发音的链接列表。 这个模块需要才能运行,之前从python包索引安装。 只有一个函数要调用,它需要 3 个参数,其他是默认值。 ``` import ForvoDownloader as for...
SuperPoint视觉里程表(SP-VO) 抽象的 此视觉是和之间的组合。 要求 的Python 3.5 脾气暴躁的 python> = 3.4 > = 0.4 数据集 SuperPoint的预训练模型 用法 执行视觉里程表 将main.py中的路径和Sequence_Num修改...
普遍阅读效率并不高,ch13中VO的出现提供了一种新的选择之前一直想完整详细地阅读一遍ch13中的VO,但时间太紧,没有腾出手来,趁年末做完这项工作,打一版详细注释代码中__“事无巨细”__地打上了相关注释,甚至对于...
现在新版本的多米电脑版本不能下载歌曲了,相信大家都在找一个可以下载的版本,这个vo 3.4.1版亲测可用。
本人以前搞不懂这些o的区别,特意查找资料总结了一下,希望也可以帮到其他人
94HB/94VO/22F/CEM-1/CEM-3/FR-4 详细介绍如下: 94HB:普通纸板,不防火(最低档的材料,模冲孔,不能做电源板) 94V0:阻燃纸板 (模冲孔) 22F: 单面半玻纤板(模冲孔) CEM-1:单面玻纤板(必须要电脑钻孔...
简单来说,当我们需要一个对象10个字段的内容,但这个对象总共有20个字段,我们不需要把整个PO对象全部字段传输到客户端,而是可以用DTO重新封装,传递到客户端。
matlab 不运行一段代码
PageHelper分页插件版本是3.4.2-fix,这个版本从中央仓库是下载不到的,这是经过修改过的版本,mybatis官方...我们目前只需要会使用就可以了,等我们学会熟练使用了,能够很好的阅读源码了,便可以看看哪些做了修改。
采用 8 引脚 DIP 封装的 VO3150可节省终端产品中的板面空间,这些产品包括不间断电源、交流及无刷直流电动机驱动、工业逆变器、开关模式电源,以及等离子显示器面板。 该VO3150的高输出电压与正电源电压紧密匹配,...
前端是可视里程表(VO),它根据相邻图像的信息粗略估计摄像机的运动,并为后端提供良好的初始值.VO的实现方法可分为两类是否提取特征:基于特征点的方法和不具有特征点的直接方法。 基于特征点的VO稳定且对照明和...
直接返回VO 特征 支持一个实体映射到多个表 支持动态字段运算符 支持分组和聚合查询 支持选择 | 地点 | 从子查询 支持实体中的嵌入参数 支持现场转换器 支持sql拦截器 支持sql方言扩展 支持多数据源和动态数据源 ...
nc开发常见问题记录,
mipi代码,支持bt1120协议,YUV422协议