两种典型的mvc模式的对比分析_第1页
两种典型的mvc模式的对比分析_第2页
两种典型的mvc模式的对比分析_第3页
两种典型的mvc模式的对比分析_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

两种典型的mvc模式的对比分析

在应用开发人员的过程中,每个问题都需要根据实际应用找到解决方案。为了提高开发效率,并增加应用系统的灵活性、安全性、实用性等,采用好的设计模式变得相当重要。随着Internet的迅速发展,Web应用程序开发技术已经发展到基于J2EE、CORBA、.NET等分布式应用技术方面。面对新的更复杂的应用,迫切需要更好的设计模式指导Web应用程序开发过程。Model-View-Controller(MVC)设计模式被证明是有效的开发模式之一,它将访问和数据的表现进行了分离。通过MVC模式,可以开发具有伸缩性、便于扩展、便于整个流程维护的应用软件。但由于MVC在不同的程序逻辑之间要保持清晰的界限,因此,在不同层次之间的通信会有性能上的损失,交换客户与服务器之间的回路信息会消耗大量的系统资源。且每个控制器直接与业务逻辑相关,当业务逻辑改变时,所有与此逻辑相关的控制器都要改变。为克服MVC模式的以上缺点,本文提出对MVC模式进行改进。其核心思想是,MVC模式里加入Facade模式成为MVCF模式,并进一步加入Delegate模式成为MVCDF模式,从而减少通信信息量,并增加应用程序开发的灵活性。本文把MVCDF模式应用于基于J2EE架构的供应链管理系统(SCM),表明这种设计模式的改进是行之有效的。1ccf模式1的改进之一1.1基于专网的会话ejb为了减少客户端与服务器之间通信的频繁度,我们将MVC模式和Facade模式相结合成为MVCF模式。Facade模式的特点是:为子系统中的若干接口提供了一个统一的接口,它定义了一个更高层次的接口,使子系统更容易使用。SessionFacade采取的是会话EJB的形式,通过SessionBean可以把构成子系统的一套业务对象“包装”在SessionBean中。这样,SessionFacade作为客户端访问业务对象的拦截器,屏蔽了业务对象。控制器通过访问SessionBean来访问业务对象。当控制器需要调用多个业务对象的方法时,它只需要进行一次粗粒度的远程方法调用,将请求送给SessionFacade,再由SessionFacade通过本地方法调用,调用相应的业务对象,执行其方法。这样减少了客户端和业务对象之间的耦合度,同时客户端也不必管理事务的细节,减轻了网络负载,提高了系统性能。并且当业务对象的方法改动时,只需要修改SessionBean,而客户端可以保持不变,从而使应用系统更容易维护、升级。1.2facade模式在MVC的Web应用模型基础上,在业务层和业务实现层(EJB)之间加入Facade层,此时Web应用程序模型如图1所示。SessionFaçade起到屏蔽了业务对象的作用。客户端通过访问Facade来访问业务对象。当EJB客户端调用多个业务对象方法时,它只需要进行一次粗粒度的远程方法调用,将请求送给Facade,再由Façade用本地方法调用相应的业务对象,执行其方法。显然当业务对象的方法改动时,只需要修改SessionBean,而客户端可以保持不变。Facade是一个会话Bean。编写Façade会话Bean代码时不需要实现业务逻辑,只提供接口供客户端调用。MVC模式中引入Facade模式具有如下优点:(1)严格分离了业务逻辑和表示层,降低系统的耦合度,提高可管理性。(2)提供了粗粒度的访问,在分布式环境下,可降低网络开销,提高系统性能。2mvdf模式改进2.1基于web-w最终的应用程序实现MVCDF模式即在MVCF模式的基础上加上BusinessDelegate业务委派模式。一个业务委派是一个完全的Java类,它起到客户层和服务层的媒介的作用。客户层局部地调用业务委派的方法。创建一个业务委派层就能实现用Java类隐藏EJBAPI的复杂性,通过概括代码请求来显露、委派和恢复来自会话和消息FacadeEJB层的访问。应用程序规划中复杂的问题之一是业务层和实现层之间的必要分隔。人们一直关心将应用和表示逻辑与业务逻辑分隔开。BusinessDelegate可以作为一个业务服务的客户方抽象使用。它可以潜在地直接与各业务组件协同工作,或者可以作为一个SessionFacade的网关供客户方使用。业务委派可以负责所有的专门EJB交互,为客户提供一个本地接口。并可以把远程异常映射到有意义的应用程序异常。BusinessDelegate是执行客户方业务信息缓冲存储的逻辑位置,可以处理值对象或者重试失败的调用以及对不同服务器的故障恢复。2.2基于业务先进的管理技术在上面的MVCF的Web应用模型基础上,在业务层和Facade层之间加入一个Delegate层,就得到MVCDF模式的Web应用模型(如图2所示)。这样,可以除去应用程序Web层上的所有技术相关性,便于形成更清晰的应用程序代码,而且还对应用程序进行了屏蔽,使得更简便地实现系统的更改。例如,如果需要从使用EJB技术移植到使用纯JDBC类,那么可以简单地用新的JDBC类来重写业务委派,此时Web层并不知道发生了变化,也不需要重新编译。业务委派是一个辅助类,它处理连接到EJB容器,获取所需资源及按需释放某些资源的细节。业务委派类有如下的特点:(1)其构造方法实现对EJB的查找和实例化。(2)类中每个方法都对应着EJB对象的一个方法。下面给出Delegate类的例子代码:在MVCF模式的基础上引入Delegate模式有以下好处:(1)严格分离了业务逻辑和表示层,降低系统的耦合度,提高可管理性。(2)提供了粗粒度的访问;在分布式环境下降低网络开销,提高系统性能。(3)使客户端代码变得简单,减少客户端和服务器之间的依赖,从而能缩短开发周期。(4)允许客户层开发者和EJB小组相对独立地编写、编译和测试各自的代码。2.3次订单申请下面介绍如何运用MVCDF模式开发SCM系统订单管理子系统的订单申请模块。本系统中视图由JSP来实现,负责与用户交互。订单申请模块中所有的View共用一个Controller。控制器由Servlet来实现。控制器接受各种业务请求,调用Delegate类进行各种请求的处理。Delegate类调用Facade会话Bean处理请求。Facade会话Bean根据请求的内容调用相应的EJB完成各种业务处理。订单申请流程描述如下:业务委派对象调用OrderFacadeBean对象的FindMaterial方法查找物资,返回物资的详细信息。用户选择一种物资同时填写采购信息。业务委派对象调用OrderFacadeBean对象的CreateOrder方法完成订单生成过程。OrderFacadeBean对象调用StockEntityBean对象的CheckStock方法查看库存量:库存足够,OrderFacadeBean对象调用ClaimEntityBean对象的CreateClaim方法新增一条领用单;库存不足,OrderFacadeBean对象调用OrderEntityBean对象的CreateOrder方法新增一条订单。图3的顺序实现了用户订单申请的过程。当使用传统的MVC模式时,业务JavaBean必须直接与StockEntityBean、ClaimEntityBean和OrderEntityBean对象交互。当它们作为业务对象放在服务器环境时,每次客户端的访问都是远程调用。而使用MVCDF模式后,除了业务JavaBean与OrderFacadeBean对象交互是远程调用之外,EJB对象之间都是本地调用。这就极大地减少远程调用,降低网络开销。本例中进行一次订单申请,使用传统的MVC模式开发进行一次订单申请需要2次远程调用,而使用MVCDF模式开发时则需要1次远程调用。而使用业务委派对象进一步实现了业务层和业务实现层的隔离,使Web层与EnterpriseJavaBeans组件保持松散耦合;使程序开发适应性更强,并且提供更清晰的异常错误处理。3应用广泛复杂应用系统将BusinessDelegate和SessionFacade模式加入传统的MVC模式,使

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论