小谈VO”大谈”OO

rainsunneau 2008-10-29 06:07:48
小谈VO”大谈”OO
我才工作3个月,就我这三个月的经验与朋友交流一下。希望比我菜的朋友学习我比

我强的朋友指点我。可是都不要笑话我。

先解释下,为什么要谈VO和OO,谈VO是因为看到一个朋友在做页面表现时不知

道从dao得到的list里要装什么。谈OO是因为他太流行,我想学习。而把他们放到一起,

是我隐约的感觉到VO在OO中的重要性,可是因为道行还不够,表达不出来。所以在这里

抛砖引玉,望朋友指点,我好从中学习。在此先谢过给位朋友了。


小谈VO


首先给出我对VO概念的理解:Value Object,简称就是VO,我的理解它字面上叫“值

对象”,但其实本质是数据传输对象,是控制层(Action)与DAO之间的数据传输对象,我

在书上读的是Action与DAO之见不用form做数据传输对象的原因是form有servlet的API。

我认为那本书说的是有道理的,毕竟我们并不想让DAO与servlet的API有很高的耦合。那

么这个VO是什么那,就是普通的Java类(POJO-Plain Old Java Object),如果用Hibernate

的时候,我们也许把他叫做实体类。对应一个数据库表的VO,就是单表VO.如一个简单的学

生类(Student),有id,name,age三个属性,对应student表的三个列。我们就会有个

StudentSVO(id,name,age).但学生似乎也可能还有其他的信息,比如家庭住址,他也是一个类

(Address),对应一个数据库表Address,有postCode,phone等。这就引出了另外一种VO,多表

VO,StudentMVO,他除了id,name,age3个属性外,还有一个addr属性。于此类似的我们也

有SDAO和MDAO。而VO和DAO是对应的,单对单,多对多。


“大谈”OO


我们现在总是在说OO,我理解的OO是这样的:现在大概OO分为OOA,OOD和OOP。

可能一个软件系统的构建过程大概也是按照这个顺序,先OOA,再OOD,最次要的就是

OOP(我以及好些和我一样的IT民工干的活)。可是据我读书,和看一些前辈的帖子得知其

实OOP是鼻祖,说当时Class是在大脑中一思考就从天而降了。

但OO是方法论,不仅是编程技巧而已,不知道这是我从哪里拿来的观点了。我对此

是深信不移的。众所周知,学会制造和使用工具推进了人类社会的发展,而人类的每件工具

的发明都是为特定领域服务的。历史学的不是很好,但好像记得人类最原始的工具是用石头

磨出来,好想是为了割兽皮的(是不是不确定,也许有别的用,暂假定是这样的),虽然简

单,但这石刀、石斧所服务的领域也有极强的针对性,割兽皮。我们现在用OO来构建软件

系统,很神秘很高深莫测啊。可究其本质,和我们的祖先磨石刀、石斧,并没有什么区别—

—制造一种工具,服务于特定的领域。

从这一点出发,来分析思考问题,立即就会最自然的进入OO.既然要服务特定的领域,

我们首先关心的当然是,这个领域都涉及到什么,就是事物,就是圈圈里的第一个圈(Object)。

这就是我们用oo来构建软件系统的第一步,即OOA,按照我这个说法OOA做的事情就是:

圈定软件系统的边界,把这个边界里的事物都找出来,当然事物不是孤立存在的,他们之间

是有联系的,之间的联系恐怕也要OOA一下才好,并且还要好好OOA一下才好,我的理

解这是OOA的重头戏。还是从书上,和前辈哪里得知OOA只解决了“做什么的问题”.并

不是很理解,从我的理解只能得出“有什么”,就是上面提的把现实世界特定领域里的事物

找出来、抽象出来。难道是我上面提到的“事物之间的联系要好好OOA一下”,而这恰恰

就解决了做什么的问题?也许是吧,好比生物系统的猫和老鼠,他们之间的关系是猫吃老鼠,

由此得出了猫是做什么的,吃老鼠的。当然这还仅是一个方面,如果可以把人也扯进来,猫

还是人的宠物,这种关系下,猫是做什么的,是做宠物的,共人类。。。的(说不清)。以此

类推还可以得到老鼠是做什么的,人是做什么的(众生平等)。当然这么下去,就麻烦了,

联系是无处不在的,人和什么都有联系,那就无法定义人是做什么的了。可别忘了,我们限

定的是服务于特定的领域,系统是有边界的,比如人作为老师存在教育这一特定领域,他是

做什么的,是教书的,是传播知识的。你这时在说他是玩猫的恐怕就不大好了吧。有玩猫的

人存在别的领域了。这么一来,我们就可以把特定领域的事物是做什么的描述的相对清楚了,

当然我们根据特定领域的特点对其进行了取舍,这就是通常说的抽象。我想在此基础上,把

这些事物的“做什么的共性”再进一步抽象,就解决了这个系统是做什么的问题了。这点实

在还是理解不清楚。

接下来就到OOD了,这也是很自然的。还拿生物系统说事吧,对于“造物主”是谁,

就我们中国的哲学就有不同的答案,在加上西方的实在说不清楚。姑且定义为“X”好了。

总之这个“X”造就了生物系统,这个生物系统里有好多像猫和老鼠这样的关系,猫吃老鼠

这种事情。现在我们要用OO来构建一个虚拟的生物系统,OOA已经抽象出了猫猫鼠鼠啦,

也抽象出了猫猫鼠鼠的行为。现实世界里“X”也很神奇的安排好了猫猫如何吃掉鼠鼠。

可我们OO出来的虚拟的系统还没有做到这一点,哪点,猫猫如何吃鼠鼠,就这点。OOD

就做这个,具体到底是怎样那?猫猫从发现鼠鼠,捉住鼠鼠,吃掉鼠鼠,吃掉后要不要满足

的擦擦嘴巴这都是OOD要做的。看来还真的挺复杂。所以我现在做不来OOD只好OOP了。

然后就到OOP了,OOP是做什么的啊?Ctrl+C,Ctrl+X,Ctrl+V,有点想法的或许会看看

Design Pattern,研究研究OO等,弄出点高级的reuse.而大多数OOP的人就是个“P”,哪有

什么OO啊。因此说啊,从我这三个月的经验看这OO,新的,好的,区别于传统的,解决

软件危机的,软件系统构造方法论,也许大多数时候是OOA+OOD+P,OR Maybe A+D+P,还

OO个P啊。不过真的相信事物的产生与消亡都是有道理的。相信OO也是一样的。还好,

无论我这OO论错也好,对也好,还是要坚持OO下去。我可不想永远是个“P”.

希望朋友们都做有想法的人,批评我也好,指点我要好,但都要是对OO有帮助的,

对远离只做个“P”的时代有帮助的。谢谢大家了,让我们在OO的世界里共同加薪!
...全文
146 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
sebatinsky 2008-10-31
  • 打赏
  • 举报
回复
有想法是不错的,我也觉得自己是一个有思想的人,可能我跟你是一样的,当然只是某一些方面,
谈谈相似的地方,我也工作三个月,到现在还不到,还差几天吧,(我是回到家乡找的工作,没有在学校找,可能主要是我思乡心切,所以回到了老家,不管做贡献也好,还是个人私欲也好,呵呵,我不喜欢探讨这些),在工作中,我也是一个'P'吧,当然现在是,到很久都应该是,如果不换工作的话,
呵呵,现在还在工作呢,其实工作很轻松,到目前,没有写实质性的代码,因为搞的是web方向,所以都是别人写好了,我照着改其他的页面,如果是ctrl+c 然后ctrl+v的话,直接就搞定,当然,修改那点点,完全不是问题,现在想想,自己也就能够自我安慰了,但是学习的脚步是没有停止过,在工作,也算学习吧,呵呵,
下次再说吧,现在思绪有点乱,本来想的好好的,可能是不想影响工作了
阳台的狗狗 2008-10-30
  • 打赏
  • 举报
回复
总结的不错,学习下。
victorxiang 2008-10-29
  • 打赏
  • 举报
回复
不错,这种学习方法值得大家学习!
null1null 2008-10-29
  • 打赏
  • 举报
回复
写的不错,善于总结!!!

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧