关于VO和Session Beans的问题?

05-07-06 edgar.xie
在《J2EE设计模式》中关于VO的看法,说是为了减少实体Beans在网络上的传输负载,当一个应用程序调用实体Beans的时候,实体Beans把它所得到的数据存放到关联的VO中,然后通过这个VO把数据传给那个应用程序。

现在的问题是,我们已经有了会话Beans来作为远程调用的接口,把实体Beans的接口做成本地的,而且会话Beans中有很多的优化机制。是不是可以代替VO了?还是它们两个的设计思想是大体上是相同的?

希望大家来一起讨论啊!

    

edgar.xie
2005-07-06 10:39
刚才我有想了想:

使用VO对象的意图:

EJB的调用使用了远程方法,它的效率一般要远低于本地方法的调用,这样我们要读取一个对象,如果使用他的getxxx方法就多次调用了远程,效率很低,如果一次性的读到值对象,这就减少了远程调用。在实际开发中,一般为每个EntityBean建一个值对象,并且在entityBean中的Home接口中,增加一个create方法,参数就是值对象,并且在接口中增加setData和getData方法。

*********************************

所以我想在设计中,当我们为EntityBean创建了一个VO以后,我们是把这个值对象放到了Session中(不是EJB中,是Web层中的),也就是把它本地化了(是相对实体Bean而言的,它仍然在服务器上^_^)。这样以后用户要用的时候就直接到Session中去取就可以了,不用到服务器上的EJB层了。而如果我们用会话Bean的话,我们就要用到EJB了。

也不知道我说的对嘛?@_@

yung
2005-07-07 09:33
有两个误区:

VO也就是DTO模式,不要在EntityBean中创建VO,而是在session bean;

尽量不要把太多数据放在HttpSession中。

实体Bean是不能操作Web层的HttpSession,包括整个EJB层都不能反向操作,只能由Web调用EJB。

猜你喜欢