張 霖 劉紅玉
摘要:在分析國內(nèi)外教育資源網(wǎng)建設(shè)現(xiàn)狀后,提出了基于MVC模式搭建的教育資源網(wǎng)框架,運(yùn)用面向切面(AOP)和控制反轉(zhuǎn)(IOC)技術(shù),將應(yīng)用層、邏輯層以及數(shù)據(jù)資源層功能進(jìn)行分離,從而實(shí)現(xiàn)了高獨(dú)立性和低耦合性的教育資源網(wǎng)。
關(guān)鍵詞:AOP IOC 教育資源網(wǎng)
中圖分類號(hào):G250.73 文獻(xiàn)標(biāo)識(shí)碼:B 文章編號(hào):1673-8454(2009)21-0022-03
縱觀當(dāng)今世界各國教育資源網(wǎng)建設(shè),西方國家利用雄厚的綜合國力,大力強(qiáng)化資源基礎(chǔ)設(shè)施建設(shè),世界各地的優(yōu)秀大學(xué)也充分發(fā)揮各自學(xué)科資源的優(yōu)勢(shì),紛紛建立了自己的教育資源網(wǎng)。而當(dāng)前我國教育資源建設(shè)還處于粗放型階段,硬件設(shè)施投入很大,但應(yīng)用水平很低,很多大學(xué)信息技術(shù)僅僅作為一種演示工具而存在,對(duì)教育的影響不大。另外我國的教育應(yīng)用軟件往往從單一學(xué)科、單一功能進(jìn)行設(shè)計(jì),各學(xué)科各功能之間不能相互聯(lián)系,造成了操作困難和資源互不兼容的問題。
安徽建筑工業(yè)學(xué)院的教學(xué)資源,因?yàn)闆]有有效的軟件機(jī)制,大量的優(yōu)質(zhì)課件、資源和素材都分散在學(xué)校的各位教師手中,造成極大浪費(fèi)。
本文針對(duì)目前國內(nèi)尤其是本校的教育資源狀況,利用流行的J2EE插件,運(yùn)用面向切面(AOP,Aspect Oriented Programming)和控制反轉(zhuǎn)(IOC,Inversion of Control)模式的技術(shù),可以很好地實(shí)現(xiàn)教育資源網(wǎng)站建設(shè)中的資源重用、松散耦合和分層開發(fā)等,降低了開發(fā)、維護(hù)的難度和成本。
一、教育資源網(wǎng)整體設(shè)計(jì)
本教育資源網(wǎng)采用MVC(Model View Controller)模式作為系統(tǒng)開發(fā)框架,利用AOP/IOC模式設(shè)計(jì)低耦合的邏輯處理層。具體內(nèi)容包括擬建設(shè)的資源和整合已經(jīng)存在的教育資源,其中已有的資源包括電子閱覽、精品課程、網(wǎng)絡(luò)課堂、軟件超市、視頻點(diǎn)播,以及來自各個(gè)系部網(wǎng)站的教學(xué)資源。這部分資源在基于MVC模式中以檢索和地址鏈接的方式提供給教師學(xué)生。另外的擬建設(shè)資源一部分來自國家、省市級(jí)別的精品課件,精品課程是國家支持的一項(xiàng)免費(fèi)工程,但是一般的學(xué)校對(duì)于本校的精品課程都做了對(duì)外訪問的流量限制,考慮到校內(nèi)教師學(xué)生遠(yuǎn)程訪問的效率,所以對(duì)本校的一些學(xué)科相關(guān)的資源利用WebZip軟件進(jìn)行了全站下載,然后,利用教育資源平臺(tái)進(jìn)行調(diào)度管理;另一部分?jǐn)M建設(shè)資源來自本校教師的教學(xué)論文、優(yōu)秀課例、課件等教學(xué)資源,優(yōu)秀視頻、多媒體教學(xué)資源,這部分資源由教師傳到教育資源平臺(tái),進(jìn)行統(tǒng)一分類、管理,提供給校內(nèi)用戶共享。以上的資源是內(nèi)部資源,原始資源都已經(jīng)存放在學(xué)校教育資源服務(wù)器上。同時(shí)本教育資源平臺(tái)也提供了外部資源的訪問入口,搜集全世界與學(xué)校學(xué)科相近的教學(xué)資源,網(wǎng)站提供鏈接。MVC框架下教育資源網(wǎng)站的整體模型,如圖1所示。
二、相關(guān)技術(shù)介紹——MVC 、AOP、IOC和Spring
MVC是應(yīng)用系統(tǒng)開發(fā)的設(shè)計(jì)模式,包括三類對(duì)象。模型(Model)對(duì)象:是應(yīng)用程序的主體部分;視圖(View)對(duì)象:是應(yīng)用程序中負(fù)責(zé)生成用戶界面的部分;控制器(Control)對(duì)象:是根據(jù)用戶的輸入,控制用戶界面數(shù)據(jù)顯示及更新Model對(duì)象狀態(tài)的部分。在應(yīng)用開發(fā)中把業(yè)務(wù)邏輯、界面顯示、數(shù)據(jù)訪問能清晰地分離,有利于應(yīng)用的重構(gòu)和維護(hù)。
AOP是OOP(Object Oriented Programming)的延續(xù),是面向切面編程。這種編程思想追求的是調(diào)用者和被調(diào)用者之間的解耦。即在做一件事情之前、之中或之后插入別的要做的事情。
IOC是一種新的設(shè)計(jì)模式。在Java開發(fā)中,IOC意味著將設(shè)計(jì)好的類交給系統(tǒng)去控制,而不是在類內(nèi)部控制。這稱為控制反轉(zhuǎn)。所有的組件都是被動(dòng)的,所有的組件初始化和調(diào)用都由容器負(fù)責(zé)。
Spring的核心是org.springframework.beans包,它的設(shè)計(jì)目標(biāo)是與JavaBean組件一起使用。這個(gè)包通常不是由用戶直接使用,而是由服務(wù)器將其用作其他多功能的底層中介,作為IOC容器的基礎(chǔ)。IOC將處理事情的責(zé)任從應(yīng)用程序代碼轉(zhuǎn)移到框架。Spring框架使用JavaBean屬性和配置數(shù)據(jù)來指出必須設(shè)置的依賴關(guān)系。
三、教育資源網(wǎng)的具體實(shí)現(xiàn)
1.用戶獲取資源的MVC模式
教育資源網(wǎng)站提供給校內(nèi)外師生用戶的就是一個(gè)搜索引擎——功能完整的瀏覽頁面,以便用戶可以快速找到自己所需要的資源。這個(gè)頁面表面上看起來是和底層的數(shù)據(jù)庫直接相連的,但實(shí)際的情況是這只是一個(gè)表示層(View),真正的資源調(diào)用方法隱藏在表示層和數(shù)據(jù)存儲(chǔ)層(Model)之間的邏輯處理層(Controller)中。這樣就避免了在頁面文件中過多地透露底層信息。
以用戶獲取教學(xué)資源的過程為例,其流程如圖2所示,表示層視圖文件downloadContent.jsp中無需嵌入任何腳本代碼,頁面操作中產(chǎn)生的邏輯動(dòng)作由表單(form)的屬性參數(shù)action="/getInnerTs.do?method=innerLink"指定從視圖到控制器的信息傳遞方向,之后由具體的Action來完成資源下載請(qǐng)求,同時(shí)把頁面中輸入的信息封裝到一個(gè)formbean(manageTSForm)中,由控制器根據(jù)配置文件的描述,分配給具體實(shí)現(xiàn)的action來處理。在這個(gè)jsp頁面文件中只有Struts標(biāo)簽描述語言,不包含處理業(yè)務(wù)邏輯的腳本語言,保證了頁面文件的純潔干凈。
Struts控制器的配置文件命名為struts-config.xml,它配置了與教育資源網(wǎng)站相關(guān)的所有業(yè)務(wù)功能。其中的部分配置代碼是關(guān)于處理下載頁面請(qǐng)求的。來自jsp頁面中的action="/getInnerTs.do?method=innerLink"的請(qǐng)求遞交之后,Struts根據(jù)struts-config.xml之中的配置,從manageTSForm這個(gè)formbean中得到要下載的資源描述信息,交給com.ts.struts.action.GetInnerTsAction.java進(jìn)行業(yè)務(wù)邏輯處理,根據(jù)method給出的不同的參數(shù),來區(qū)分是內(nèi)部資源還是外部資源,是內(nèi)部資源則提供下載功能,是外部資源則提供準(zhǔn)確的鏈接地址。同時(shí),在這個(gè)配置中也分別給出了在下載成功和失敗的情況下,轉(zhuǎn)向相應(yīng)的控制器來處理。
2.利用IOC實(shí)現(xiàn)教育資源網(wǎng)后臺(tái)管理用戶的登錄
首先寫一個(gè)IBase的接口,和一個(gè)BaseDao的實(shí)現(xiàn)。在實(shí)現(xiàn)中仿照HibernateTemplate,將其功能一一實(shí)現(xiàn)。然后為每一個(gè)Entity都建立繼承于以上類的IEntity,與EntityDao。這里可以根據(jù)需求對(duì)Entity加入特殊的方法實(shí)現(xiàn),如在AdminDao.java中加入類似用戶身份驗(yàn)證等。以上就是數(shù)據(jù)訪問層。接下來在Service層中通過對(duì)dao的引用完成業(yè)務(wù)邏輯方法,AdminServiceImpl.java(代碼如下)中有一個(gè)IAdmin接口類型的私有變量adminDao,與這個(gè)變量相關(guān)的只有一個(gè)setAdminDao設(shè)值方法,是為依賴注入(dependency injection)設(shè)置的,因?yàn)椴恍枰谕獠康玫竭@個(gè)變量,所以沒有相應(yīng)的get方法。
public class AdminServiceImpl implements IAdminService {
private IAdmin adminDao;
public void setAdminDao(IAdmin adminDao) {
this.adminDao = adminDao;}
}
AdminServiceImpl需要一個(gè)IAdmin接口類型的實(shí)例,在編譯時(shí)不需要這個(gè)具體的實(shí)例,只是在運(yùn)行時(shí)(runtime)容器把當(dāng)時(shí)已經(jīng)生成的實(shí)例根據(jù)配置描述文件植入AdminServiceImpl的實(shí)例中。這里是在applicationContext.xml中描述了要植入的符合IAdmin接口類型的那個(gè)實(shí)例adminDao,其實(shí)adminDao也是在這里定義的。通過這種IOC方式,AdminServiceImpl雖然需要adminDao的服務(wù),但耦合性已經(jīng)不存在AdminServiceImpl.java代碼中了。這樣,業(yè)務(wù)層(AdminServiceImpl)需要什么樣的持久化層(adminDao)交給容器來組織安排,為系統(tǒng)維護(hù)也提供了方便,例如可以在applicationContext.xml中把任何一個(gè)從IAdmin接口擴(kuò)展而來的實(shí)例編織給AdminServiceImpl使用。兩層之間的耦合性就消解了,其實(shí)更確切地說,是轉(zhuǎn)移到容器的配置文件中了。
3.利用AOP實(shí)現(xiàn)教育資源網(wǎng)后臺(tái)管理用戶的登錄
在Spring 配置信息中,session Factory引用了Local Session Factory Bean,而 my Transaction Manager引用了Hibernate Transaction Manage。代碼中my Transaction Manger Bean有個(gè)session Factory屬性,就設(shè)置為這個(gè)bean的引用。 Hibernate Transaction Manager有個(gè)session Factory setter 和getter方法,這是用來在Spring啟動(dòng)的時(shí)候?qū)崿F(xiàn)依賴注入的。在session Factory屬性里引用session Factory,這兩個(gè)對(duì)象在Spring容器初始化后就被組裝了起來。session Factory的兩個(gè)屬性,分別是用來注入mapping Resources和hibernate Propertes。通常,如果在Spring之外使用Hibernate,這樣的設(shè)置應(yīng)該放在 hibernate.cfg.xml中。
adminDao這個(gè)bean經(jīng)過spring framework框架的代理包裝,裝入接口類IAdmin,并加載兩個(gè)攔截器hibernate Interceptor和admin Dao Target。通過事務(wù)管理器admin Manager bean把定義好的事務(wù)管理my Transaction Manager bean和封裝了admin Daobean的admin Manager Targetbean管理目標(biāo)bean在高一個(gè)層次上再次封裝,transaction Attributes屬性定義事務(wù)怎樣被處理,transaction Attributes屬性為方法名定義模式和它們?cè)鯓訁⑴c進(jìn)一個(gè)事務(wù)。以get開頭的方法名參與的事務(wù)方式為PROPAGATION_ SUPPORTS,即如果有當(dāng)前事務(wù),此方法會(huì)加入到當(dāng)前事務(wù),否則容器也不會(huì)啟動(dòng)新的事務(wù)。這樣,通過spring framework框架實(shí)現(xiàn)了以AOP方式對(duì)數(shù)據(jù)訪問的事務(wù)管理。
四、總結(jié)
本文利用IOC/AOP編程模式和MVC的系統(tǒng)設(shè)計(jì)模式實(shí)現(xiàn)了教育資源網(wǎng)站的建設(shè)、各層次的相對(duì)獨(dú)立性和低耦合性,使得網(wǎng)站具有可擴(kuò)展性,并便于應(yīng)用系統(tǒng)的日后維護(hù)。
參考文獻(xiàn):
[1]儲(chǔ)凡靜,劉方愛.一種基于XML的個(gè)性化的資源需求描述機(jī)制[M].計(jì)算機(jī)技術(shù)與發(fā)展,2008,18(6):67-68.
[2]金玉,尤學(xué)貴.利用多層次負(fù)載均衡策略實(shí)現(xiàn)對(duì)江蘇教育資源網(wǎng)的改造[J].中國教育信息化,2008(8):73-75.
[3]何清林,賈向陽.基于SOA/MVC的教育資源網(wǎng)站建設(shè)研究[J].宜春學(xué)院學(xué)報(bào),2007,29(2):83-85.
[4]夏昕,曹曉剛,唐勇.深入淺出Hibernate[M].北京:電子工業(yè)出版,2005.6.
[5]劉曉華.精通Java核心技術(shù)[M].北京:電子工業(yè)出版,2003.8.
(編輯:楊馥紅)