标签:value object 设计模式 设计优化 rmi 远程调用
在J2EE 软件开发中,通常会对系统模块进行分层,如下图所示:
展示层主要负责数据的展示,业务路基层负责具体的业务逻辑处理,而持久层负责数据库等持久化操作。
大型系统中,这些层次很有可能会被分离,部署在不同的服务器上。而在两个层次之间可能通过远程调用 RMI 等方式进行通信。例如有一个订单,有客户姓名、产品名称和编号三个属性,获取一个订单的过程如上图,要进行3次数据交互。
虽然这种模式可行,却有两个严重的问题:
第一,以面向对象设计的角度来看,这种方式不合理,繁琐且不具有较好的维护性。
第二,一个订单进行3次通信,性能太低。
为了解决这个问题,就可以使用 Value Object 模式。这种模式提倡将一个对象的各个属性进行封装,将封装后的对象在网络中传播,从而使系统拥有更好的交互模型,并且减少网络通信数据,从而提高系统性能。
经过优化,得到下图的架构模型:
这样只需要进行一次远程调用便可以得到完整的 Order 信息,缩短了存取的响应时间,减少了网络数据流量。
要实现这样的模型,我们需要五部分。
第一个角色是订单那信息的载体:Order 实体类
public class Order implements Serializable{
private static final long serialVersionUID = -426476071552949121L;
private int orderId;
private String clientName;
private int number;
private String productName;
//省略 getter 和 setter 方法
}public interface IOrderManager extends Remote {
public Order getOder(int id) throws RemoteException;
public String getClientName(int id) throws RemoteException;
public int getProdName(int id) throws RemoteException;
public int getNumber(int id) throws RemoteException;
}public class OrderManager extends UnicastRemoteObject implements IOrderManager{
private static final long serialVersionUID = 1924550532702082608L;
//限制了只有子类或本包类可以使用
protected OrderManager() throws RemoteException {
super();
}
@Override
public Order getOder(int id) throws RemoteException {
System.out.print("Request received! ID = "+ id);
Order o =new Order();
o.setClientName("zq");
o.setNumber(1);
o.setOrderId(2);
o.setProductName("Car");
return o;
}
@Override
public String getClientName(int id) throws RemoteException {
return "zq";
}
@Override
public int getProdName(int id) throws RemoteException {
return 0;
}
@Override
public int getNumber(int id) throws RemoteException {
return 1;
}
}public class OrderManagerServer {
public static void main(String[] args){
try{
LocateRegistry.createRegistry(1099);
IOrderManager userManager = new OrderManager();
Naming.bind("userManager", userManager);
System.out.println("OrderManager is ready!");
}catch (Exception e){
System.out.println("OrderManager Server failed:"+e);
}
}
}public class OrderManagerServer {
public static void main(String[] args){
try{
LocateRegistry.createRegistry(1099);
IOrderManager userManager = new OrderManager();
Naming.bind("userManager", userManager);
System.out.println("OrderManager is ready!");
}catch (Exception e){
System.out.println("OrderManager Server failed:"+e);
}
}
}服务端:OrderManager is ready!
Request received! ID = 1Request received! ID = 1
客户端:zq
自此,一个简单的 Value Object 模型便实现了!
标签:value object 设计模式 设计优化 rmi 远程调用
原文地址:http://blog.csdn.net/zq602316498/article/details/39016353