




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1.1 跟我学软件系统业务层模块设计中所涉及的J2EE核心设计模式和GOFg序代码设计模式(第 2部分)在本单元中希望重点了解和掌握如下的业务层设计模式的具体应用:服务定位器模式, 单例设计模式,商业业务代理类模式,Iterator模式,观察者(OBSERVER)模式,本地访 问模式,会话门面模式,消息门面模式,中介模式。1.1.1 本地访问模式(Local)1、意图(1)由于EJB的效率低,如果部分 EJB仅是在内部使用(同一个java VM ,),而不是远 程调用,就应该使用本地方法。(2)只有在提供Facde的SessionBean才使用远程接口。该种方式其实在一般的资料中 并不把它作为
2、模式来讲,但是我认为这是一种模式。大家在自己的项目中最好使用它。2、动机减少网络的远程调用的开销3、结构一般是,在远程 SessionBean中调用本地接口 EntityBean ,结合Session Fa.ade 模1.1.2 门面模式(Facade)1、门面模式(1)定义外部与一个子系统的通讯必须通过一个统一的门面(Facade)对象进行,这就是Facade模式。在Java平台中使用会话门面模式是非常方便而且普及的,比如在JDBC的数据库连接中统一使用DataSouce对象来完成就是其具体的应用。(2)客户需要与子系统内部的许多对象打交道设计师处理复杂系统的一个常见方法便是将其"
3、分而治之",把一个系统划分为几个较小的子系统。但是这样做了以后,设计师往往仍然会发现一个子系统内仍然有太多的类型 要处理。而使用一个子系统的使用端往往只关注一些特定的功能,却要同时与子系统内部 的许多对象打交道后才能达到目的,请见右面的对象图。这就是一种不便,它使得系统的逻辑变得不必要的复杂,维护成本提高,复用率降低。(3)用一个范例来说明门面设计模式中国大陆的医院便是一个子系统,按照部门职能,这个系统可以划分为挂号、门诊、 划价、化验、收银、取药等。看病的病人要与这些部门打交道,就如同一个子系统的使用 端与一个子系统的各个类型打交道一样,不是一件容易的事情。病入1*病人2病人3r代
4、骑卡取药首先病人必须先挂号,然后门诊。如果医生要求化验,病人必须首先划价,然后缴款, 才能到化验部门做化验。化验后,再回到门诊室,请见下面的对象图解决这种不便的方法便是引进 Facade模式。仍然通过医院的范例说明,可以设置一个接待员的位置,由接待员负责代为挂号、划价、缴费、取药等。这个接待员就是Facade模式的体现,病人只接触接待员,由接待员负责与医院的各个部门打交道,请见下面的对象 图。2、Facade模式的设计要求Facade模式要求一个子系统的外部与其内部的通讯必须通过一个统一的门面(Facade)对象进行。Facade模式提供一个高等级的接口,使得子系统更易于使用。使用了 Faca
5、de模式之后,前面所描述的一个子系统的使用端对象所面对的复杂关系就可以简化为下面这个样子描述经过Facade模式的改装后,一个子系统的使用端与子系统的关系。图中的大方框 代表一个子系统。就如同医院的接待员一样,Facade模式的门面类型将使用端与子系统的内部复杂性分隔开,使得使用端只需要与门面对象打交道,而不需要与子系统内部的很多 对象打交道。3、Facade模式的主要优点这种模式一个显而易见的好处,本来一个类的修改可能会影响一大片代码,而加了外 观类以后只需要修改很少量的代码就可以了,这就使系统的高级维护成为可能。外观模式定义了一个把子系统的一组接口集成在一起的高层接口,以提供一个一致的 处
6、理方式,其它系统可以方便的调用子系统中的功能,而忽略子系统内部发生的变化。(1)使用Facade之前的程序类图Client2(2)使用Facade之后的程序类图4、Facade模式在数据访问层组件中具体应用为了能够将数据访问逻辑组件类设计为可以为不同类型的客户端-为Servlet、JavaBean或者其它的Web组件提供一致的数据访问的接口,或者要求将数据访问逻辑组件 设计为与当前及潜在的业务过程层的实现要求相兼容,以减少必须实现的附加接口、接触 面或映射层的数目,可以考虑采用门面(Facade )设计模式-利用该设计模式可以隐藏对 具体不同的数据访问逻辑组件的访问的细节。5、门面模式的主要特
7、点(1)会话面实际上就是业务层的一个控制对象,它负责控制用户与企业数据和企业服务对象之间的交互;(2)门面模式为用户提供了使用子系统组件的统一的接口,使用户减少了处理对象的数目,并且使子系统使用简单。(3)在一个复杂的应用系统中,甚至可能会有多个会话面作为用户和对象模块之间的中介。6、门面模式的使用场合1)为一个比较复杂的子系统,提供一个简单的接口。2)把客户程序和子系统的实现部分分离,提高子系统的独立性和可移植性。3)简化子系统的依赖关系1.1.3 会话门面模式(session facade) 在J2EE EJB组件的设计中的应用在J2EE项目设计与应用中,会话门面模式是一种普遍使用的模式。
8、它可以使得应用更 分布式,代码耦合减少,网络流量减少。总体上它给了客户端粗粒度的访问,保护了服务 器端的代码。有人说会话门面模式是一个成功系统必备的设计方案,这是一点也不夸张。在一个成功的分布式应用中不使用会话门面模式简直有点不可想象。1、该设计模式出现的背景这种设计模式出现的背景在于 EJB通常既包括程序数据,又包括程序逻辑,而这些代码 都会通过一定的界面作用于客户层,在多层次的J2EE平台应用程序中,就会造成一定的困难。具体来说,在J2EE平台上的多层次系统中,通常会存在以下的问题,而通过会话门面 模式能够很好地解决该问题:1) 层次之间联系过于紧密,客户层和后端的业务对象具有较强的依赖关
9、系;2) 在客户和服务器之间有多次方法调用,因而导致了Web 性能方面的问题;3) 缺乏一定的客户访问机制,使得一些后台对象被随便访问。2、会话门面模式的主要特点1) 会话面实际上就是业务层的一个控制对象,它负责控制用户与企业数据和企业服务对象之间的交互;2) 在一个复杂的应用系统中,甚至可能会有多个会话面作为用户和对象模块之间的中介。3、实现的形式( 1)无状态的会话面在实现会话面的时候,首先应该决定是用状态化还是无状态的会话bean 来实现, 这主要取决于会话面所建模的业务流程;如果一个业务流程只需要一次方法调用就可以实现其服务,那么就可以使用无状态的会话bean 来实现它。( 2)状态化
10、的会话面当一个业务流程需要多次方法调用来实现其服务时,开发人员最好使用状态化的会话bean 来实现这一流程,因为每次方法调用的状态信息都必须在会话bean 中保存。4、会话门面模式的优点会话门面模式在合作的企业对象间调节操作,并将应用访问合成一个单一简单的界面;它减少了类之间合作的复杂性,并使得类的调用者在该类变化的时候无需改动,这种模式通常以一个会话Bean实现,以用来隐藏底层EJB的复杂交互。通过在应用系统中采用会话面的设计模式,将在系统中得到以下的收益:1) 为用户也即EJB 组件的客户程序提供一个简单的接口,并隐藏所有与系统组件复杂的交互过程;2) 减少暴露给用户的企业对象,从而降低它
11、们之间的依赖关系(因为会话外观分离了业务对象和客户端);3)向用户隐藏系统组件间的交互过程和依赖关系,从而使得系统更加容易管理,并提供相当的灵活性;提供一套统一的用户访问机制,便于管理用户对于系统服务的请 求与访问。4)提供粗粒度访问:会话外观减少客户端和服务器之间的网络负载。客户端与业务数据的所有交互都是通过会话外观以粗粒度的发拿过是进行的。5、利用会话门面模式简化项目中的 Webg户端对EJB组件的调用首先定义一些EntityBean和一些实现业务逻辑的SessionBean,然后在把这些业务逻 辑封装在SessionBean中以供 Web层调用。由于一般在调用层不负责事务的管理,一个业务
12、逻辑就是一个独立的事务。在Web层其实只需获得表示层所提交的数据,并对数据进行简单的校验,然后直接提交到EJB层进行处理,这样使 Web的功能很简单cltenr: Session EntkyEnikyObject: BeanlBoanlBean2dbrtilVdoThatd ;beforeII IdoMorsO I inetwork: boundary;afterClient : Session SessionOljectdoOnet wait; houndry iFacade BeamdoThlstdaltMOdoMorsQEntityBeamEntityBaan26、会话面设计模式的类图I
13、nvokeHictvl J<aClientH 电。indl h jit7、会话面序列图8、会话门面模式的实现形式(1)无状态的会话SessionBean-实现无状态的会话面模式该会话Bean主要为客户端提供各种功能性的服务,比如:外汇兑换、理财计算器等,因为这些业务流程只需要一次方法调用就可以实现其服务o(2)有状态的会话SessionBean-实现状态化的会话面模式当一个业务流程需要多次方法调用来实现其服务时,开发人员最好使用状态化的会话bean来实现这一流程,因为每次方法调用的状态信息都必须在会话bean中保存。本项目中的有状态的会话 Bean主要实现跟踪用户在网站上的各种访问状态和
14、业务请求Enlilji JB 1 -1Ru'irKi,Entityk4ll'KlUc5“ j.出现吧ICM加口H中 wU htihILtDkia 露口 Otoist. I附偃tMflhiid iI I (ktjS<i ddti机grfiIhffinmScnw21 I.UW 时工 hhrWMcM t*!21 23 国CT-q-*i_I>u t*hjrct9、会话门面模式的应用示例( 1)待解决的问题考虑一个银行系统中,顾客转帐的例子。设想这样的情景:顾客在ATM对自己的帐户做远程操作,把自己的钱从储蓄帐号转到经常使用帐号。应用中,系统首先要核实客户的身份,然后从储蓄帐
15、户消掉要转的钱,再次在经常使用增加这部分钱。我们用三个EJB 来表示这核对帐户(Customer EJB) , 对存储帐户操作(SavingAccount EJB) 和对经常帐户(CheckingAccount EJB) 操作。( 2)常规的实现方式客户端首先获得用户验证、然后可以在储蓄帐目下消去要求转帐额,再次就可以转储到经常帐目了。三个动作我们都用 EJB实现。客户端依次与三个 EJB交互。我们选取 CheckingAccound EJB做研究对象,看看客户 端是怎样与这个Bean交互的,从EJB对客户端做的响应,我们可以看到 EJB的原理。客户 端调用本地方法 CheckingAccou
16、ntHome获得对EJB的引用,Home接口会有一个或多个 Creat() 方法。这个接口是与CheckingAccountBean 互动的,在实现中有个ejbCreateA()方法。这种互动由是通过容器实现的。Creat() 方法返回的是一个远程接口,此例中就是CheckingAccount 了,客户端就得到了对远程接口的引用了,在远程接口中会有一些方法 的引用。客户通过这些方法,对远程操作实现业务逻辑。这些方法的实现必须在 CheckingAccountBean 中实现。上面的过程我们已经看到,在获得对实现方法调用前客户 端不得不与远程交互两次。在核对阶段同样要两次才能取得正确的认证,储蓄
17、帐目的操作 也同样如此。( 3)常规的实现方式的主要存在的问题明白了操作过程与EJB 原理后,我们分析上述客户端调用业务逻辑的方法至少有三点缺陷。 首先,一点没有伸缩性上面我们看到一个简单的转帐业务逻辑就要求客户端直接与服务器端交互六次。要是有其他的逻辑或者增加一个业务方法,客户端又得重新增加多重调用。如果是不同的客户 端有不同的方法,方法调用更是忙上加乱。不良的伸缩性能从这里体现。 在整个转帐过程中,实际上只是一个事务处理过程,要么转成功,要么不成功。所以必须 保证 saving account 和 CheckingAccount 在一个事务处理中。其次,这种方法没有一致性的保证但是在上述处
18、理中,我们看到这种保证是要求在客户端进行的。为了保证两个帐户的一致性,客户端必须把对两个 EJB的调用包装在一个事务处理中。由于网络的不可靠性, 延迟和错误在这时很可能会发生,事务处理的时间就自然拉长了,错误的可能性就自然增 加,死锁可能造成,一致性也就难以保证。再次,业务逻辑直接暴露,安全让人担忧 所有的业务逻辑直接暴露的说明在注意到客户端对远程方法的调用,发现都是直接调用。显然,这种方法直接暴露给客户端任意调用的方式直接导致服务器端毫无隐私,显然是方法调用的安全处理所不允许的。当然在检查EJB方法调用权限的时候,EJB规范也定义了相应的角色和安全控制,虽然这种把安全问题推到部署阶段的方法是
19、规范允许的。但是这不同于WEB 应用,对于商业性非常强的应用更是要寻求更安全的措施来解决问题。( 4)改进的方法 用 Session Fa?ade 模式为了克服这些缺陷,我们可以引入防火墙的概念用 Session Fa?ade 模式在客户端与业务方法之间加上一层Session bean ,这样客户端与远程交互就多了一层“防火墙”,可以获得所有防火墙的好处。在目前网络状况下,网络相对与计算机来说还是一个瓶颈(bottleneck ) ,在使用了Session Fa?ade 模式后我们把六次或更多的网络连接减少到了一个。对业务方法的访问变成为本地访问。在计算机与容器的条件下,处理速度自然比网络访问
20、要快。不同的客户都是同一的一次性调用,伸缩性可扩展性由此显现。更重要的是,SessionFa?ade Bean 包装了业务逻辑的所有方法,并集中控制事务;业务方法也不在直接暴露在客户端下,一致性和安全性都有了保障事务处理的严格要求转由服务器端的容器来保证,无疑可靠性大大增强了。总之,我们不用在每次传一个细粒度的方法调用了,可以一次传递所有参数给服务器端,复杂的业务逻辑方法也从暴露给客户端处理成隐藏对客户不可见。复杂性虽然推到了Session Fa?ade Bean 中,但是逻辑更独立,耦合性更小了。(5)进一步完善的实现-Session Fa?ade模式+ DTO模式在实际的应用中,我们常常使
21、用值对象传送模式来代替transfer() 方法。值对象传送模式在客户端与EJB层之间传递、交换数据。一个值对象实际上是一个包装了业务数据的序列化了的类,下面是此银行系统中代替transfer() 方法的值对象:AccountTransferValueObject 。public class AccountTransferValueObject implements java.io.Serializable private String customerPK;private String fromAccountPK;private String toAccountPK;private floa
22、t amount;.public String getCustomerPK() return customerPK;public String getFromAccountPK()return fromAccountPK;public String getToAccountPK()return toAccountPK;public float getTransferAmount()return amount;public void setCustomerPK(String customerPK)this.customerPK = customerPK;public void setFromAc
23、countPK(String fromAccountPK)this.fromAccountPK = fromAccountPK;public void setToAccountPK(String toAccountPK)this.toAccountPK = toAccountPK;public void setTransferAmount(float amount)this.amount = amount;有了值对象,客户端在需要传递数据时候,就把所有的数据打包在值对象中,然后通 过网络发送到EJB层,经过Session Facade Bean交给业务逻辑处理。同样当业务逻辑与 客户端交互时,
24、EJB层就会创建一个值对象来包装业务方法需要传递的数据,通过SessionFa?ade Bean传递给客户端。1.1.4消息门面模式由于JMS为不同的企业级应用程序提供了松散耦合的集成方法,不同应用程序可以通 过异步消息来通信。在一些提醒、回复通知、订阅、短消息等非实时性高要求的地方,者B可以使用JMS例如:有邮件到达、手机短消息、网络QQ肖息,这些都可以统一放到一个个人的 Queue 中,从而实现统一消息服务处理。通过JMS来实现这一方案,将是非常的简单,并且易于扩展。1、利用MDBS现消息门面模式-“点对点”1)本项目中的MDB主要实现异步通讯,完成比如用户网上各种“预订”业务、用户 对于网站的各项服务的反馈意见提交到公司的Web站点上(发送MapMessage消息)。2)用户的在线书评使用p2p作为异步消息传递系统进行实现3)在本项目中的用户管理的需求中, 需要对用户所丢失的密码进行查询。如果输入用户的信箱,系统将查询后的密码发往用户的信箱。2、利用MDBS现消息门面模式-“主题和订阅”(1)在本电子商务系统中分别定义一个“优惠业务”和“会员”主题当客户购
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 版式设计(第二版)课件-版式设计的内涵
- 互联网成本控制试题及答案
- 校招操作系统面试题目及答案
- 复杂系统设计中的算法选择试题及答案
- 常见网络管理员考试问题及试题及答案
- 2025年可持续发展战略试题及答案
- 风险管理在企业中的应用试题及答案
- Oracle数据库内部培训体系
- 校招:采购工程师面试题库及答案
- 企业战略的灵活性与适应性试题及答案
- 三级综合医院评审标准(2024年版)
- 餐厅服务员(初级)职业鉴定理论考试题及答案
- 国有企业外派董监事、高管人员管理办法
- 2024年时事政治题库及参考答案(100题)
- 《汽车构造》期末考试复习题库(含答案)
- DB3301-T 0222-2024 国际化医院建设规范
- 《念奴娇·过洞庭》《赤壁赋》联读教学设计 2023-2024学年统编版高中语文必修下册
- 检验人员训练教材-QC技能手册
- 巡视整改和成果运用的意见原文
- 2024-2025学年新教材高中生物 第3章 基因工程 第4节 蛋白质工程的原理和应用教案 新人教版选择性必修3
- 人工智能训练师理论知识考核要素细目表三级
评论
0/150
提交评论