Value Object模式()
在JEE软件开发中通常会对系统模块进行分层展示层主要负责数据的展示定义数据库的UI组织模式业务逻辑层负责具体的业务逻辑处理持久层通常指数据库以及相关操作在一个大型系统中这些层次很有可能被分离并部署在不同的服务器上而在两个层次之间可能通过远程过程调用RMI等方式进行通信如图所示展示层组件作为RMI的客户端通过中间的业务逻辑层取得一个订单(Order)的信息假设一个订单由客户名商品名和数量构成那么一次交互过程可能由图所描述的这样RMI的客户端会与服务端进行次交互依次取得这些信息
图 展示层与业务逻辑层交互示例
基于以上模式的通信方式是一种可行的解决方案但是它存在两个严重的问题
()对于获取一个订单对象而言这个操作模式略显繁琐且不具备较好的可维护性
()前后累计进行了次客户端与服务器的通信性能成本较高
为了解决这两个问题就可以使用Value Object模式Value Object模式提倡将一个对象的各个属性进行封装将封装后的对象在网络中传递从而使系统拥有更好的交互模型并且减少网络通信数据从而提高系统性能使用Value Object模式对以上结构进行改良定义对象Order由Order对象维护客户名商品名和数量等信息而Order对象也就是Value Object它必须是一个可串行化的对象将Value Object模式应用到本例中便可以得到如图所示的结构
图 Value Object模式架构图
在基于Value Object模式的结构中为了获得一份订单信息只需要进行一次网络通信缩短了数据存取的响应时间减少了网络数据流量
注意使用Value Object模式可以有效减少网络交互次数提高远程调用方法的性能也能使系统接口具有更好的可维护性
RMI服务端的接口实现如下其中getOrder()方法取得一个Value Object其他方法均取得Order对象的一部分信息
public interface IOrderManager extends Remote {
public Order getOrder(int id) throws RemoteException;
//Value Object模式
public String getClientName(int id) throws RemoteException;
public String getProdName(int id) throws RemoteException;
public int getNumber(int id) throws RemoteException;
}
一个最简单的IOrderManager的实现它什么也没做只是返回数据
[] []