时间:2024-05-09
张 霖 刘红玉
摘要:在分析国内外教育资源网建设现状后,提出了基于MVC模式搭建的教育资源网框架,运用面向切面(AOP)和控制反转(IOC)技术,将应用层、逻辑层以及数据资源层功能进行分离,从而实现了高独立性和低耦合性的教育资源网。
关键词:AOP IOC 教育资源网
中图分类号:G250.73 文献标识码:B 文章编号:1673-8454(2009)21-0022-03
纵观当今世界各国教育资源网建设,西方国家利用雄厚的综合国力,大力强化资源基础设施建设,世界各地的优秀大学也充分发挥各自学科资源的优势,纷纷建立了自己的教育资源网。而当前我国教育资源建设还处于粗放型阶段,硬件设施投入很大,但应用水平很低,很多大学信息技术仅仅作为一种演示工具而存在,对教育的影响不大。另外我国的教育应用软件往往从单一学科、单一功能进行设计,各学科各功能之间不能相互联系,造成了操作困难和资源互不兼容的问题。
安徽建筑工业学院的教学资源,因为没有有效的软件机制,大量的优质课件、资源和素材都分散在学校的各位教师手中,造成极大浪费。
本文针对目前国内尤其是本校的教育资源状况,利用流行的J2EE插件,运用面向切面(AOP,Aspect Oriented Programming)和控制反转(IOC,Inversion of Control)模式的技术,可以很好地实现教育资源网站建设中的资源重用、松散耦合和分层开发等,降低了开发、维护的难度和成本。
一、教育资源网整体设计
本教育资源网采用MVC(Model View Controller)模式作为系统开发框架,利用AOP/IOC模式设计低耦合的逻辑处理层。具体内容包括拟建设的资源和整合已经存在的教育资源,其中已有的资源包括电子阅览、精品课程、网络课堂、软件超市、视频点播,以及来自各个系部网站的教学资源。这部分资源在基于MVC模式中以检索和地址链接的方式提供给教师学生。另外的拟建设资源一部分来自国家、省市级别的精品课件,精品课程是国家支持的一项免费工程,但是一般的学校对于本校的精品课程都做了对外访问的流量限制,考虑到校内教师学生远程访问的效率,所以对本校的一些学科相关的资源利用WebZip软件进行了全站下载,然后,利用教育资源平台进行调度管理;另一部分拟建设资源来自本校教师的教学论文、优秀课例、课件等教学资源,优秀视频、多媒体教学资源,这部分资源由教师传到教育资源平台,进行统一分类、管理,提供给校内用户共享。以上的资源是内部资源,原始资源都已经存放在学校教育资源服务器上。同时本教育资源平台也提供了外部资源的访问入口,搜集全世界与学校学科相近的教学资源,网站提供链接。MVC框架下教育资源网站的整体模型,如图1所示。
二、相关技术介绍——MVC 、AOP、IOC和Spring
MVC是应用系统开发的设计模式,包括三类对象。模型(Model)对象:是应用程序的主体部分;视图(View)对象:是应用程序中负责生成用户界面的部分;控制器(Control)对象:是根据用户的输入,控制用户界面数据显示及更新Model对象状态的部分。在应用开发中把业务逻辑、界面显示、数据访问能清晰地分离,有利于应用的重构和维护。
AOP是OOP(Object Oriented Programming)的延续,是面向切面编程。这种编程思想追求的是调用者和被调用者之间的解耦。即在做一件事情之前、之中或之后插入别的要做的事情。
IOC是一种新的设计模式。在Java开发中,IOC意味着将设计好的类交给系统去控制,而不是在类内部控制。这称为控制反转。所有的组件都是被动的,所有的组件初始化和调用都由容器负责。
Spring的核心是org.springframework.beans包,它的设计目标是与JavaBean组件一起使用。这个包通常不是由用户直接使用,而是由服务器将其用作其他多功能的底层中介,作为IOC容器的基础。IOC将处理事情的责任从应用程序代码转移到框架。Spring框架使用JavaBean属性和配置数据来指出必须设置的依赖关系。
三、教育资源网的具体实现
1.用户获取资源的MVC模式
教育资源网站提供给校内外师生用户的就是一个搜索引擎——功能完整的浏览页面,以便用户可以快速找到自己所需要的资源。这个页面表面上看起来是和底层的数据库直接相连的,但实际的情况是这只是一个表示层(View),真正的资源调用方法隐藏在表示层和数据存储层(Model)之间的逻辑处理层(Controller)中。这样就避免了在页面文件中过多地透露底层信息。
以用户获取教学资源的过程为例,其流程如图2所示,表示层视图文件downloadContent.jsp中无需嵌入任何脚本代码,页面操作中产生的逻辑动作由表单(form)的属性参数action="/getInnerTs.do?method=innerLink"指定从视图到控制器的信息传递方向,之后由具体的Action来完成资源下载请求,同时把页面中输入的信息封装到一个formbean(manageTSForm)中,由控制器根据配置文件的描述,分配给具体实现的action来处理。在这个jsp页面文件中只有Struts标签描述语言,不包含处理业务逻辑的脚本语言,保证了页面文件的纯洁干净。
Struts控制器的配置文件命名为struts-config.xml,它配置了与教育资源网站相关的所有业务功能。其中的部分配置代码是关于处理下载页面请求的。来自jsp页面中的action="/getInnerTs.do?method=innerLink"的请求递交之后,Struts根据struts-config.xml之中的配置,从manageTSForm这个formbean中得到要下载的资源描述信息,交给com.ts.struts.action.GetInnerTsAction.java进行业务逻辑处理,根据method给出的不同的参数,来区分是内部资源还是外部资源,是内部资源则提供下载功能,是外部资源则提供准确的链接地址。同时,在这个配置中也分别给出了在下载成功和失败的情况下,转向相应的控制器来处理。
2.利用IOC实现教育资源网后台管理用户的登录
首先写一个IBase的接口,和一个BaseDao的实现。在实现中仿照HibernateTemplate,将其功能一一实现。然后为每一个Entity都建立继承于以上类的IEntity,与EntityDao。这里可以根据需求对Entity加入特殊的方法实现,如在AdminDao.java中加入类似用户身份验证等。以上就是数据访问层。接下来在Service层中通过对dao的引用完成业务逻辑方法,AdminServiceImpl.java(代码如下)中有一个IAdmin接口类型的私有变量adminDao,与这个变量相关的只有一个setAdminDao设值方法,是为依赖注入(dependency injection)设置的,因为不需要在外部得到这个变量,所以没有相应的get方法。
public class AdminServiceImpl implements IAdminService {
private IAdmin adminDao;
public void setAdminDao(IAdmin adminDao) {
this.adminDao = adminDao;}
}
AdminServiceImpl需要一个IAdmin接口类型的实例,在编译时不需要这个具体的实例,只是在运行时(runtime)容器把当时已经生成的实例根据配置描述文件植入AdminServiceImpl的实例中。这里是在applicationContext.xml中描述了要植入的符合IAdmin接口类型的那个实例adminDao,其实adminDao也是在这里定义的。通过这种IOC方式,AdminServiceImpl虽然需要adminDao的服务,但耦合性已经不存在AdminServiceImpl.java代码中了。这样,业务层(AdminServiceImpl)需要什么样的持久化层(adminDao)交给容器来组织安排,为系统维护也提供了方便,例如可以在applicationContext.xml中把任何一个从IAdmin接口扩展而来的实例编织给AdminServiceImpl使用。两层之间的耦合性就消解了,其实更确切地说,是转移到容器的配置文件中了。
3.利用AOP实现教育资源网后台管理用户的登录
在Spring 配置信息中,session Factory引用了Local Session Factory Bean,而 my Transaction Manager引用了Hibernate Transaction Manage。代码中my Transaction Manger Bean有个session Factory属性,就设置为这个bean的引用。 Hibernate Transaction Manager有个session Factory setter 和getter方法,这是用来在Spring启动的时候实现依赖注入的。在session Factory属性里引用session Factory,这两个对象在Spring容器初始化后就被组装了起来。session Factory的两个属性,分别是用来注入mapping Resources和hibernate Propertes。通常,如果在Spring之外使用Hibernate,这样的设置应该放在 hibernate.cfg.xml中。
adminDao这个bean经过spring framework框架的代理包装,装入接口类IAdmin,并加载两个拦截器hibernate Interceptor和admin Dao Target。通过事务管理器admin Manager bean把定义好的事务管理my Transaction Manager bean和封装了admin Daobean的admin Manager Targetbean管理目标bean在高一个层次上再次封装,transaction Attributes属性定义事务怎样被处理,transaction Attributes属性为方法名定义模式和它们怎样参与进一个事务。以get开头的方法名参与的事务方式为PROPAGATION_ SUPPORTS,即如果有当前事务,此方法会加入到当前事务,否则容器也不会启动新的事务。这样,通过spring framework框架实现了以AOP方式对数据访问的事务管理。
四、总结
本文利用IOC/AOP编程模式和MVC的系统设计模式实现了教育资源网站的建设、各层次的相对独立性和低耦合性,使得网站具有可扩展性,并便于应用系统的日后维护。
参考文献:
[1]储凡静,刘方爱.一种基于XML的个性化的资源需求描述机制[M].计算机技术与发展,2008,18(6):67-68.
[2]金玉,尤学贵.利用多层次负载均衡策略实现对江苏教育资源网的改造[J].中国教育信息化,2008(8):73-75.
[3]何清林,贾向阳.基于SOA/MVC的教育资源网站建设研究[J].宜春学院学报,2007,29(2):83-85.
[4]夏昕,曹晓刚,唐勇.深入浅出Hibernate[M].北京:电子工业出版,2005.6.
[5]刘晓华.精通Java核心技术[M].北京:电子工业出版,2003.8.
(编辑:杨馥红)
我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!