MVC一体化开发研究

2009-06-22 03:41孔凡兴
新媒体研究 2009年20期

孔凡兴

[摘要]针对传统MVC设计模式的缺点,结合结构型模式中Facade,Bridge和Dynamic Proxy模式设计理念,提出一种分布式系统的优化Mvc模型,并将该模型应用到J2EE在线考试管理系中。实践表明,优化的MVC型在应用中具有良好的可重用性和扩展性。

[关键词]结构型模式Facade Bridge MVC

中图分类号:TP3立献标识码:A文章编号:1671--7597(2009)1020076--01

设计模式是一套被反复使用、经过验证的设计经验的总结,是在某一情景下类似问题的重复性解决方案。使用设计模式可改善代码的可维护性和可重用性,让开发者从一个更高的视角进行设计思考。然而,面对新的更加复杂的应用需求,迫切需要寻找和设计更有效的设计模式来指导应用程序开发过程。

Model-Yiew-Control(MVC)模式是目前国内外较流行、高效的设计模式之一。然而传统的MVC模式还存在一些不尽人意的地方,控制器与模型之间保持清晰的界限,不同层次之间的频繁的通信会消耗大量的系统资源;每个控制器直接与业务逻辑相关联,当业务逻辑改变时,需改变与该业务相应的控制器;对不同类型数据的低效率访问,模型操作的接口不同,需要多次调用才能获得需要的数据。为克服MVC模式以上的缺点,结合Fa-cade,Bridge和Dynamic Proxy几种典型模式各自的特点来改进传统MVC模式的不足,从而解决传统MVC模式中信息通信资源消耗大、控制器与业务逻辑高耦合等缺点,提高了系统的灵活性和开发效率。

一、优化的MVC设计模式

(一)引入Facade模式思想

问题描述:由于MVC在不同程序逻辑之间要保持清晰的界限,因此在不同层次之间的通信会有性能上的损失,控制器与模型之间的回路信息会消耗大量的系统资源。

Facade模式的思想是提供一个统一的高层次接口,使得子系统更容易调用。在Mvc模式中引入Facade模型,将复杂的业务逻辑分成多个子系统,Facade模式采用Session Bean(会话Bean)作为较高逻辑提供统一的接口,将系统的业务逻辑集中,从而降低客户端与服务器之间的耦合度,降低系统的复杂性。在分布式环境中Facade模型的引入为远程对象提供了粗粒度的访问,减少客户端与服务器之间频繁的调用,提高了系统性能。

(二)引入Bridge模式思想

问题描述:MVC中每个控制器直接与业务逻辑相关联,当业务逻辑改变时,需改变与该业务相关的控制器。Bridge的主要思想是将抽象与实现分离,使它们可以独立地变化,当仅使用Session Facade模式时,客户端与EJB(Enterprise Java Bean)层紧密的耦合,形成控制器和业务逻辑的强依赖关系。Bridge模式在抽象类和它的实现类之间提供一个分层,控制一个对象到另一个对象的访问,因此,采用Bridge来创建中间构件可以分离客户端和Sesslon Bean之间耦合关系。在实际应用,将同组业务逻辑设计成为抽象类,由具体的业务类逻辑来实现,应用Java反向映射机制,控制器使用XML分析器来根据不同的模块配置进行Bridge抽象类实例化,再调用其方法,而不需要知道它请求的具体行为。Bridge在抽象类与实现之间,起到了桥梁作用,使控制器和业务逻辑可以独立变化。

(三)引入Dynamio Proxy模式思想

问题描述:HVC中模型对不同类型数据访问效得需要的数据。DynamicProxy模式通过在运行期构建一个对接口的动态实现类来对目标对象的代理,它在对间提供一个接口层,控制一个对象到另一个对象访问。利用Dynamic Proxy模式定义访问不同数源的接口,针对数据源不同类型在实现的类中定不同数据源的访问方法,获取和操作数据,能同时持多个数据库。这样当数据库类型更换时,不会及到商业逻辑代码的大量修改。J2髓应用中,Session Bean一般和客户端应用是一一对应,而和据库联系紧密的是Entity Bean(实体Bean),Proxy式实质是在Entity Bean和数据源之间又多了一ProxyDAO的数据访问对象。Dynamic Proxy的引入系统的模型业务与数据存取分离,模型业务类只责数据的操作,不涉及具体的数据源,当数据发生化时,不影响系统的业务处理。

二、典型的网络应用

(一)应用实例

以J2EE架构在线考试试卷管理系统为例来明采用优化MVC的分布式应用模型的优点。图的UML的序列图表示该系统进行试卷管理的业流程,实现标准化试卷资源的数据库管理,试卷资的共享和快速分发,为学生用户提供在线测试功能。

(二)具体的实现方法

1以试卷管理为例,将考试系统中的添加试卷、查试卷等业务子系统提供一个基于工作流的接口,入Facade模式。通过PaperFacade会话Bean进行业务逻辑封装,简化了原系统设计,实现示例如下。publicclass PaperFacade implements SessionBean。以本例中试卷申请业务为例,采用传统MVC模式Controller必须与数据实体对象直接远程交互,进行一次试卷申请至少需要2次远程调用,而加入Facade层后在一个事务中就可以完成,而且将访问的多个数据属性封装到一个对象中传递减少网络传输资源消耗。可见,通过Facade会话层实现对事务的管理,避免了分布式对象之间远程调用的资源消耗。减轻控制器的负担,从而降低控制器和模式耦合。

2加入Bridge模式的Web应用。针对控制器与业务方法之间过于紧密问题,解决方法是将抽象类和它的实现部分放在不同的层次结构。以试卷管理为例,将试卷管理分离成抽象类AbsAdmin和它的实现类^dminPaperImpl,业务操作类(增加、删除试卷)扩展AdminPaperlmpl,并实现具体的业务操作action方法。在AbsAdmin类中创建私有的AdminPaperImpl成员变量,在action方法调用adminimpl的业务方法。这样就可以在控制器动态决定具体执行哪个业务方法,由具体的业务类进行实例化RefinedAbstration类。