PO,VO,DTO....

看到这样的问题楼上的几位兄弟还在讨论,实在有些遗憾。我曾经在关于这样问题讨论上发了多个帖子,可惜,大家都不怎么看,看了也不怎么思考。
PO是什么?难道就是hibernate中间才有?如果是讨论具体的一样东西,我也须不会回帖了,但是看到大家把架构都抬出来,但是一些基本的概念都不清晰的时候,我想我应该回帖的。
没有hibernate是否有PO?当然!CMP、BMP、JDO都是PO,甚至你自己都可以写一个,只要这个对象具有持久性,就是PO。我想问问楼上几位,CMP、BMP可以传递到表现层么?
你们所谓的传递到表现层的对象已经不是PO,而是VO了,因为它根本不具备任何持久性,只是一些数据的对象封装罢了。VO又是什么?它和PO有什么关系?PO反映的是数据库实体的存储,而VO是反映的是业务逻辑或者表现逻辑的一种对象(或者又称为DTO吧)。一个VO可以小于一个PO(比如说我们查询的列表,就只会显示少许的字段);一个VO可以大于一个PO(简单地将,就是一个数据库视图级的反映);一个VO可以完全和一个PO相同(也就是楼上出现的现象了)。
如果自己实现PO,那么的话,我们的确可以用一个对象起PO和VO的双层作用,但是我可以说,这是极其低劣的设计。为什么?简单地讲,它给我们带来这样几个问题:一、所有的表现与数据库的存储完全挂钩,既然这样,就不要谈什么架构了,谈架构就是笑话。二、系统间完全耦合,没有任何层次可言,任何一个地方的修改会导致整个系统的修改。三、当需要一个VO大于PO的情况(我们知道数据库许多表中存储的是相应其他表的外键,而不是具体的值),这个时候,就会出现数据装载的问题(要么采用延迟装载,要么一次性大装载),极端地讲,一个业务实体如果引用了十多个基础实体,那么在显示业务实体的时候,就必须访问十多次数据库,要么就是一次性十几个实体全部装载,两者就是速度、内存的极端反映。
说了这么多,我希望楼上的兄弟在讨论架构这样大型的概念的时候,要充分地想一想。批判精神要有,但是前提是你真得理解了~~~~~~~
希望这样的帖子,对你们有益~~~~~~。

posted on 2004-12-14 22:35  笨笨  阅读(4113)  评论(3编辑  收藏  举报

导航