基于MVC的远程教育平台体系结构设计与实现
点击数:170822010-05-15 10:34:02 来源: 北京精英达康科技有限公司
体系结构是指宏观的物理或者逻辑的程序结构,包括程序包的组织,在网络的各个节点之间的程序包分布,程序的各个组成部分之间的通信和协同工作机制[1]。远程教育平台体系结构设计是系统设计的一项重要工作。目前,远程教育平台都采用动态网页技术(ASP,JSP等),其功能得到一定的增强,出现了诸如“在线注册”、“在线选课”、“在线讨论与答疑”、“在线课堂”、“在线考试”等[2,3]。从体系结构上看,属于3层体系结构模式。这种架构模式分层结构清晰,但存在以下缺点:这仍属于服务器上运行整体式应用程序的集中式计算,这种解决方案在系统用户的数目可以预测和控制时是比较有效的,而他的缺点是系统的可伸缩性、可维护性、移植性、可重用性、安全性和可靠性都较差。
随着Internet的发展,用户可以在任何时间任何地点通过Internet访问远程教育平台进行自主学习,系统负载无法估计,远程教育平台必须要改善上述缺点,才能真正的满足需求[4]。另外,体系结构设计的好坏,不仅直接影响到系统开发的难度、周期和效率,而且还会影响到系统的运行效率和维护等。因此,设计体系结构时,要综合考虑这些因素。
本文结合MVC模式和J2EE分布式架构来设计远程教育平台体系结构,充分运用优秀的设计模式和分布组件技术实现平台体系结构。
1 MVC模式和J2EE分布式体系结构
1.1 MVC模式[1,5]
模型-视图-控制器(Model-View-Controller,MVC)模式主要适用于交互式Web应用,尤其是存在大量页面及多次客户访问及数据显示。MVC模式具有3类组件:模型、视图和控制器, MVC体系结构如图1所示。

模型负责表示、访问和更新商业数据,执行商业逻辑操作,是现实世界流程的软件模拟;在模型变化的时候,他将通知视图并提供后者访问自身状态的能力,同时控制器也可以访问其功能函数以完成相关的任务。
视图负责显示模型的内容。他从模型取得数据并指定这些数据如何被显示出来。在模型层变化的时候,他将自动更新。另外视图也会将用户的输入传送给控制器。
控制器负责定义应用程序的行为,可以分派用户的请求并选择恰当的视图以用于显示,同时他也可以解释用户的输入并将他们映射为模型可执行的操作。
在模型、视图和控制器之间划分责任可以减少代码的重复度,并使应用程序维护起来更简单。同时由于数据和业务逻辑分开,在新的数据源加入和数据显示变化的时候,数据处理也会变得简单。
1.2 J2EE分布式体系结构
J2EE计算平台是建立在Java语言的“一次编写,到处运行”的理念之上的。J2EE的思想是通过一个基于组件的应用程序模型为分布式应用程序提供一个统一的标准[6]。J2EE是一个标准的、平台无关的多层体系结构,适用于开发和部署分布式的基于组件的、高度可用的、安全的、可伸缩的、可靠的、易于管理的企业应用程序[5,7]。J2EE体系结构的目标是减少开发分布式应用程序的复杂性和代价,简化开发和部署过程。J2EE多层体系结构如图2所示。J2EE的基本体系结构由客户层、Web层、业务逻辑层和企业信息系统层组成。

(1)客户层是应用程序的显示部分,其主要功能是负责人机交互:显示用户界面,处理用户输入,进行输入数据校验,请求服务器服务,显示由服务器端返回的结果。有4类客户:基于Webservice业务伙伴系统,利用SoAP协议与Web组件进行交互;基于Web Browser的客户或无线设备,通过HTTP(s)协议与Web组件进行交互;纯Java应用客户,通过HTTP(S)协议和Web组件进行交互,或通过RMI-IIOP协议访问EJB组件;非Java客户,如CORBA通过RMI-IIOP协议直接访问EJB组件[6,7]。
(2) Web层由JSP,Servlet,JSTL和Java Beans组件构成,存在于Web服务器中,代表服务器端处理的显示逻辑。Web层的功能是当用户浏览器从Web服务器上请求JSP文件时,Web服务器响应该HTTP请求并进行简单处理,再调用EJB进行商业逻辑处理,将结果组织成HTML形式发送回浏览器[6]。
(3)业务逻辑层用EJB封装应用领域的业务逻辑。J2EE使用EJB容器作为EJB组件的部署环境,在EJB容器中提供了分布式计算中组件需要的所有服务,如组件生命周期的管理、数据库连接的管理、分布式事务管理、组件的命名服务、自动容错以及负载的自动均衡能力等。实现事务逻辑的EJB组件可以更加高效的运行在应用程序服务器中,支持多客户端的访问[6,7]。
(4)企业信息系统层包括数据库系统、ERP和其他遗留信息系统等。
2 远程教育平台体系结构设计与实现
2.1 MVC的实现
设计远程教育平台体系结构,采用将MVC模式与J2EE框架相结合的思路。系统组件到MVC的映射是多样的。根据远程教育平台实际情况,用J2EE的核心技术实现MVC模式的3个组件。视图用JSP技术实现;控制器用Servlets技术实现;模型用JavaBeans或EJB。以JSP
为主实现网站的用户界面,Servlets负责管理对用户请求的处理,JavaBean/EJB实现业务流程并从后台数据库中检索或更新数据[7]。
2.2 体系结构设计
为了提高系统的可维护性、可扩展性、可靠性以及可重用性,采用多层体系结构来设计服务器端应用程序。层间通信采用如下设计规则:客户层只能访问Web组件层;Web组件层只能存取业务逻辑层;业务逻辑层只能通过数据访问层存取数据层。下层屏蔽本层的实现细节,通过组件接口向上层提供透明的服务。同时采用一些优秀的设计模式来改善系统的设计,提升应用系统的性能。结合MVC模式和J2EE多层体系结构的特点,远程教育平台体系结构设计如图3所示[7]。
2.3 体系结构的实现技术
使用优秀的设计模式来降低层间耦合、减少网络负载、增强系统的可维护性、可扩展性、可移植性、可重用性等。客户层使用HTTP协议和Web组件层通信,Web组件层通信使用IIOP(网际对象互操作协议)和业务逻辑层通信,业务逻辑层使用VO(值对象)和DAO进行数据交互,DAO通过JDBC访问不同的数据库[7,8]。
2.3.1 客户层实现技术
采用瘦客户端设计,所以Web客户层设计非常简单。在客户层对用户输入的表单信息,采用JavaScript进行输入有效性验证,这些验证包括:查看用户是否漏填了一些必须要求填写的信息,比较用户输入的密码和确认密码是否一致,查看用户输入数据的格式是否符合要求等。由于JavaScript语言功能有限只能进行一些简单的验证。对于更复杂的精确的验证必须要在服务器端进行。如果将这些简单的验证都传送到服务器端,无疑是加大了网络和服务器的负载以及延时响应[7]。
2.3.2 Web组件层主要实现技术
(1)会话管理方法的选择
HTTP是一种无状态协议。客户端每次请求获得响应完成后,服务器和客户端Socket连接就会关闭。通过在服务器上保存会话状态提供不同页面之间的信息交换。在服务器保存状态,非常适合有大量会话状态的应用,不会像客户端保存会话状态那样受到大小和类型的约束。还避免向客户端暴露会话状态的安全问题,同时在传输会话状态时,只有请求中有状态,而应答中没有,因此也不会对网络的性能造成影响[8]。

(2)控制Web客户端的访问
系统有多种用户如:普通用户、注册用户、已批准学习的用户、教师、管理员,如何控制用户访问各自的系统资源?通过对视图保护来控制客户端的访问,只有注册或登录的用户才允许访问某些特定的视图,或者基于角色访问控制只有具有相应权限的用户才能访问视图的某些部分。通过系统配置描述文件(Web.xml)来实现,只允许借助从其他应用资源内部调用才能访问特定的资源,直接的浏览器调用是无法访问这种受限的资源[7,8]。
(3)前端控制器设计模式
控制逻辑经常在多个JSP页面中重复出现,这样造成维护困难。使用前端控制器设计模式,把重复的控制逻辑从单个JSP中移到控制器内中。这样可以提高应用的模块化、可重用及可维护性。同时控制器提供一个控制和管理Web请求和处理的集中式入口点。
(4)向业务层隐藏特定表示层的细节
表示层的数据结构,如HTTPServletRequest应该被限制在表示层内,向业务逻辑层提供特定于表示层的数据结构,大大增加了层间耦合,降低了可重用性。采用JavaBean和值对象在层间传输数据,可以降低层间耦合,增强可维护性。
2.3.3 业务逻辑层主要实现技术
(1)业务代表设计模式(Business Delegate)使用业务代表设计模式可以降低表示层客户端和业务层之间的耦合。业务代表隐藏了业务逻辑层服务的实现细节,可以保护客户端免于受业务服务API实现的易变性影响,当业务服务API或者其低层产生变化时,不必对表示层代码进行大量的更改。另外采用业务代表可以缓冲结果和对远程对象的引用,从而可以在一定程度上减少代价昂贵的网络通信次数。
(2)服务定位器设计模式(Service Locator)
客户端都使用JNDI来查找并创建EJB对象。不同类型的客户端反复地使用JNDI服务, JNDI代码会多次出现在这些客户端,容易导致代码重复现象。另外,创建JNDI环境对象和在EJB本地对象上执行查找都会占用大量的资源。因此,使用服务定位器来抽取所有的JNDI使用,并且向客户端提供了一个简单的接口lookupService。这样做会降低客户端的复杂性[7,8]。另外,找到的服务对象被缓冲在服务定位器中便于以后使用,以避免当该客户端再次需要本地对象时重新发起JDNI查找。
(3)会话外观设计模式(Session Facade)
实体Bean是粗粒度分布式持久对象。实体Bean上每一个调用都是一个远程网络方法,代价昂贵。使用会话Bean作为实体Bean的外观,该会话Bean包含实体Bean的交互逻辑,以及相关的工作流逻辑。客户端和实体Bean的交互都己迁移到业务层的会话外观中。会话外观设计模式为用户提供一个简单的接口,并隐藏所有与系统组件复杂的交互过程[7]。
2.3.4 数据访问层实现技术
把数据库访问代码抽取到一个新类(数据访问对象)中。数据访问对象管理与数据库的连接以便于检索和存储数据,数据访问对象完全向客户隐藏了数据源实现细节,当底层数据源变化时,数据访问对象向客户端提供的接口不会变化[7,8]。可以说数据访问对象充当业务逻辑层和数据源之间的适配器,数据访问对象抽象和封装所有对数据源的访问,这一模式创建了更清晰的抽象,提高了内聚力,降低耦合,因而增强了模块性和可重用性。同时也减少业务对象中的代码复杂度。
3 结 语
远程教育平台体系结构采用了分层的设计原则,各层之间相互独立并且使用标准的通信协议,上层是服务的使用者,下层通过接口向上层提供服务,服务的使用者不必知道服务的提供者是如何实现的,那么下层的修改不会影响上层,使系统能够快速响应需求的变更,提高了系统的维护性和扩展性。该体系结构是分布式的,分布式组件可以运行在多个应用服务器上,各服务器通过集群而协同工作,具备负载均衡和透明的失败转发机制,提高了系统的可靠性和伸缩性。该体系结构融合了J2EE标准使得开发出的产品不仅可以跨硬件、跨操作系统,还可以跨应用服务器,这些都大大提高了投资的回报率。实际运行证明,本文提出的技术方案具有可行性和先进性,在一定程度上解决了当前远程教育平台体系结构设计的不足,达到系统设计的目标。
| 上一页1下一页 |
【责任编辑:】(Top) 返回页面顶端
![]() |


