Java程序性能优化-Value Object模式(1)[1]
Java程序性能优化-Value Object模式(1)[1]
Value Object模式( )
在J EE软件开发中 通常会对系统模块进行分层 展示层主要负责数据的展示 定义数据库的UI组织模式 业务逻辑层负责具体的业务逻辑处理 持久层通常指数据库以及相关操作 在一个大型系统中 这些层次很有可能被分离 并部署在不同的服务器上 而在两个层次之间 可能通过远程过程调用RMI等方式进行通信 如图 所示 展示层组件作为RMI的客户端 通过中间的业务逻辑层取得一个订单(Order)的信息 假设一个订单由客户名 商品名和数量构成 那么一次交互过程可能由图 所描述的这样 RMI的客户端会与服务端进行 次交互 依次取得这些信息
图 展示层与业务逻辑层交互示例
基于以上模式的通信方式是一种可行的解决方案 但是它存在两个严重的问题
![Java程序性能优化-Value Object模式(1)[1]](http://img.zhputi.com/uploads/637d/637de5e069980dae63801e602ce5fb7c14462.jpg)
( )对于获取一个订单对象而言 这个操作模式略显繁琐 且不具备较好的可维护性
( )前后累计进行了 次客户端与服务器的通信 性能成本较高
为了解决这两个问题 就可以使用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的实现 它什么也没做 只是返回数据
lishixinzhi/Article/program/Java/gj/201311/27814