快速业务通道

两种设计模式在EJB开发中的应用 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23
用程序业务对象往往比较复杂,在这种情况下,根据客户端请求不同,有可能单个业务对象会产生多个不同的值对象。在这种情况下,可以考虑采用多值对象策略。这种策略的实现比较简单,就是在entity bean中增加不同的Get×××ValueObject()方法和set×××ValueObject()方法。

2.Session Facade 模式

有了实体Bean,客户端就可以直接调用它以获得数据。也就是说实体Bean封装了业务数据,并把他们的接口暴露给客户,因而也就把分布式服务的复杂性暴露给客户。在对J2EE 应用程序环境下,一般会产生如下问题:

1、紧密耦合,这回导致客户端和业务对象的直接依赖关系

2、客户端和服务器之间的网络方法调用太多,容易导致网络性能问题

3、缺乏统一的客户访问策略,容易误用业务对象

4、如果实体bean的API改动,那么用户端的一些代码也要修改,扩展性很差

两种设计模式在EJB开发中的应用 - 编程入门网

解决这些问题的方法就是把客户端和实体bean分割开。本文采用Session Facade模式,如图3-2所示。该模式通过一个Session Bean,为一系列的实体bean提供统一的接口来实现流程。事实上,客户端只是使用这个接口来触发流程。这样,所有关于实体bean实现流程所需要的改变,都和客户端无关。当实体bean改变时,我们不用改变客户端的代码,只要对Session Bean做出相应的改变即可,大大提高了系统的可维护性。

通过实体bean来表示业务对象是session fa?ade的最常见用法。但多个实体bean参与某用例时,不必向客户暴露所有实体bean。相反的,用session bean 包装这些实体bean ,并且提供粗粒度方法来执行所需的业务功能,从而隐藏了实体bean交互的复杂性。

但是千万不要以为Fa?ade模式就是简单的用Session Bean把Entity Bean的所有方法统统封装起来,而不提供任何额外的抽象。其实这是对Fa?ade模式的滥用。这样做并不是降低整个系统的复杂性,而是把复杂性转移到另一个对象上。

正确应用Facade模式应遵循三条基本原则:

1、他们自己不作实际工作,而是委派其他对象作实际工作。

2、他们提供简单的接口。

3、他们是底层系统的客户端接口。他们应该把特定于子系统的信息封装起来,并且不应该在不必要的情况下公开它。

两种设计模式在EJB开发中的应用(3)

时间:2010-12-06

三、具体代码

下面用一个简单的银行系统的例子来解释Fa?ade模式和Value Object模式的具体应用。

创建Entity Bean。其中对每个属性的get和set方法是自动生成的,我们不去管它。

public interface Account extends javax.ejb.EJBObject { private AccountValue creaeAccountValueObject(); void setAccountVauleObject(AccountValue v); AccountValue getAccountValueObject(); ……}

其中

private AccountValue createAccountValueObject(){ AccountValue vo=new AccountValue(); vo. accountNumber=accountNumber; Vo.balance=balance; ……} public AccountValue getAccountValueObject(){ return createAccountValueObject(); } public void setAccountValueObject(AccountValue v){ accountNumber=v. accountNumber; balance=v.balance; ……}

用值对象封装Entity Bean数据。

public class AccountValue implements java.io.Serializable { private java.lang.String accountNumber; private double balance; void setBalance(double newValue) ……}

用Factory或者是Action类逻辑方法,涉及到数据的地方使用值对象。

public class AccountFactory {   private static AccountHome accountHome = null;    ……   public java.util.Vector getAccounts(String userid) throws FactoryException {    try { Ve

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号