前言:一篇好文章的誕生,需要你不斷地搜集資料、整理思路,本站小編為你收集了豐富的mvc框架主題范文,僅供參考,歡迎閱讀并收藏。
關鍵詞:JavaScript mvc框架;DOM;Backbone.js
中圖分類號:TP311 文獻標識碼:A 文章編號:1009-3044(2014)10-2242-04
Abstract: The basic structure and design pattern of JavaScript MVC framework are introduced and analyzed to achieve the client code readability, testability, maintainability and scalability in Web development. Taking the Backbone.js framework as examples, the codes of JavaScript MVC framework in Web Development are demonstrated and other precautions are elaborated in practical application.
Key words: JavaScript MVC Framework; DOM; Backbone.js
1 問題的提出
在傳統(tǒng)的B/S軟件開發(fā)中,服務器端進行業(yè)務邏輯和數(shù)據(jù)處理,客戶端進行HTML頁面顯示,其中客戶端JavaScript主要用于改善用戶體驗。而隨著Ajax、JQuery及相關插件的推廣,部分業(yè)務邏輯就無可避免地會在客戶端實現(xiàn)??蛻舳说腏avaScript文件很容易從幾句變成幾千行代碼,開發(fā)人員也會陷入一系列的DOM操作和嵌套的JQuery回調(diào)函數(shù)中。開發(fā)的復雜性也日益明顯,常常會出現(xiàn)一個人無法看懂另外一人開發(fā)的JavaScript代碼的情況,很難做到客戶端代碼的可讀性、易測試、可維護性和可擴展性。
2 MVC框架
MVC是模型(model)-視圖(view)-控制器(controller)的縮寫,是傳統(tǒng)Web應用開發(fā)中服務器端廣泛使用的軟件開發(fā)模式,它用一種業(yè)務邏輯和數(shù)據(jù)顯示分離的方法來組織代碼,具有耦合性低、重用性高、可維護性高、有利于軟件工程化管理的特點。最典型的MVC是JSP + servlet + javabean的模式。
1)模型(model)主要包括業(yè)務邏輯模塊(web項目中的Action,dao類)和數(shù)據(jù)模塊(pojo類)。模型與數(shù)據(jù)格式無關,這樣一個模型能為多個視圖提供數(shù)據(jù)。
2)視圖(view)是用戶與之交互的界面,在web中視圖一般由jsp,html組成。
3)控制器(controller)接收來自界面的請求并交給模型進行處理。
典型的HTTP請求/響應過程MVC流程如下:
3 JavaScript MVC框架
當前Web應用程序在客戶端有越來越多的邏輯判斷和數(shù)據(jù)處理,尤其是客戶端包括地理信息、本地化存儲、websocket等功能時,客戶端代碼極難維護。為了解決這一問題,現(xiàn)在已有多個JavaScript MVC框架(Backbone.js、 Ember.js、 AngularJS、Knockout等)將傳統(tǒng)的MVC框架引入到前端開發(fā)中。
JavaScript MVC框架中M代表數(shù)據(jù),V代表DOM,C協(xié)調(diào)輸入輸出并操作數(shù)據(jù),MVC框架就是將數(shù)據(jù)與DOM進行分離,它并不僅僅只是一種,還有多種擴展模式,表示為MV*(星號代表有不同選擇),例如:MVP(Model-View-Presenter)、MVVM(Model-View-ViewModel)。
JavaScript MVC與傳統(tǒng)的服務器端MVC有所不同,它主要是將數(shù)據(jù)和界面顯示分開,即將模型和視圖進行分離。事實上,不同的JavaScript MVC框架在控制器(controller)方面,其實現(xiàn)方式也各不相同。有些框架(例如Backbone.js)控制器與視圖的界限比較模糊,原本部分應該在控制器中進行的操作直接就在視圖中實現(xiàn)了,有些框架(例如Ember.js和ExtJS)則將控制器作為調(diào)度中心,用來啟動應用程序、初始化數(shù)據(jù)模型、監(jiān)測數(shù)據(jù)變化、調(diào)用相應操作等。
從設計模式來說,JavaScript MVC框架主要采用觀察者模式、策略模式和組合模式,根據(jù)不同框架的實現(xiàn)方式,也可能會用到工廠模式和模板方法模式。JavaScript MVC框架采用觀察者模式實現(xiàn)內(nèi)部核心通信(當數(shù)據(jù)變化時通知觀察者),通過這種方式實現(xiàn)多個視圖綁定到一個模型并進行同步。
4 Backbone.js在Web開發(fā)中的應用
Backbone.js 是一個重量級javascript MVC框架,主要組件是模型、視圖、集合和路由器。在 Backbone.js中,模型存儲通過 RESTful JSON 接口從服務器檢索到的數(shù)據(jù),模型與視圖密切關聯(lián),負責為特定 UI 組件渲染 HTML 并處理元素上觸發(fā)的事件,路由器處理URL并在客戶端進行邏輯處理。Backbone.js具有以下特點:
u強制依賴于 Underscore.js。
u非強制依賴于 jQuery/Zepto。
0 引言
隨著互聯(lián)網(wǎng)迅猛發(fā)展,使得動態(tài)網(wǎng)站建設要求更高,在網(wǎng)站開發(fā)方式上傳統(tǒng)的模式已經(jīng)無法滿足人們的需要,MVC模式對這個問題進行來了很好的解決[1]。MVC作為一種開發(fā)模式在解決大型Web項目問題上發(fā)揮了重要作用。PHP是一種專業(yè)的網(wǎng)站的開發(fā)語言,然而現(xiàn)有的PHP開發(fā)模式尚未有成熟、統(tǒng)一的規(guī)范,系統(tǒng)水平的高低取決于開發(fā)人員的專業(yè)素質(zhì)及經(jīng)驗等,已經(jīng)無法滿足人們在開發(fā)效率、可擴展性、可靠性及可維護性等方面快速房展的需求[2]。因而把框架機制引入PHP的開發(fā)成為人們關注的重點。
1 MVC設計模式
1.1 MVC設計模式在Web中的應用
MVC(Model-View-Controller)把數(shù)據(jù)處理、數(shù)據(jù)表示及程序輸入輸出控制進行分離,對不同部分對象間的通信方式進行了描述,使其不受其它數(shù)據(jù)模型及其方法的影響,從而讓程序結構更加清晰并具有靈活性[3]。MVC把應用程序的輸入、輸出、處理強行分離,MVC的應用程序分為模型、控制器及視圖三個部件[4]。MVC組件的功能及關系如圖1所示。
Web應用程序從傳統(tǒng)意義上來說一般都是由ASP/PHP進行創(chuàng)建的。它們把數(shù)據(jù)層代碼、HTML表示層代碼混合,即便開發(fā)者經(jīng)驗豐富、水平較高,從表示層把數(shù)據(jù)分離也具有一定的困難[5]。MVC把它們從根本上進行了強制分離,雖然MVC的構造工作量變大,但仍就有諸多優(yōu)點。其一,具有低耦合性。視圖層、業(yè)務層分離,視圖層代碼更改不需要對模型、控制器代碼進行修改。同樣,改變業(yè)務流程或者規(guī)則只要對MVC的模型改動就可以,不需要更改視圖層代碼。模型和控制器、視圖是分離的,因而應用程序的數(shù)據(jù)層及業(yè)務規(guī)則改變十分容易。其二,具有高重用性、可適用性。科學技術水平不斷提高,訪問應用程序的方式變得多種多樣。同樣一個服務器端的代碼MVC模式可以讓多種視圖進行訪問如Web瀏覽器等。模式只能夠?qū)?shù)據(jù)未格式化的部分進行返回,因而為不同界面的使用提供了便利。其三,具有快速開發(fā)的能力,MVC模式可以讓界面設計人員對表現(xiàn)形式更加關注,程序員對開發(fā)業(yè)務邏輯更加重視,使系統(tǒng)的前端、后端同時開發(fā),使系統(tǒng)開發(fā)時間大為縮短。其四,具有可維護性。視圖層、業(yè)務邏輯層進行分離,使得它們之間聯(lián)系只能通過接口,任何部分內(nèi)部都不會對其他部分產(chǎn)生影響,從而使Web應用具有可維護性。其五,為軟件工程化管理提供了便利。不同層可各司其職,一個層面的應用不同但也有某些相同特征,為軟件工程化管理提供了便利。
1.2 MVC設計模式的PHP實現(xiàn)
PHP對象在服務器端不能跨頁面存在,所有PHP實際上是沒有辦法實現(xiàn)傳統(tǒng)的MVC架構的,其問題主要在模型上得到體現(xiàn),如在Java中,數(shù)據(jù)模型是獨立的,不同于業(yè)務邏輯、表現(xiàn)邏輯等,它可以在服務器端跨頁面存在,JavaBean 就是在這個方面發(fā)揮作用[6]。PHP進程在內(nèi)存中不能長期存在,只能在PHP頁面剛剛執(zhí)行時創(chuàng)建,頁面執(zhí)行結束,則該進程已經(jīng)結束,基于這種情況,模型不能進行直接實現(xiàn)。
因PHP語言跨頁面無法存在,PHP開發(fā)框架中使用被動MVC更為適合。在被動MVC模式上,模型身處MVC結構下卻不知。也就是說模型是一個普通的ο螅和MVC中的其他部分是沒有關聯(lián)的。這樣的話,模型就不用再跨頁面存在,改變了使用MVC導致的效率低下現(xiàn)象。
被動MVC模式和傳統(tǒng)意義上的主動MVC模式不同,模型是一個簡單的獨立的對象,因而自身的改變不能傳達給視圖;視圖也無法對模型的更新作出訂閱及監(jiān)視等。視圖只能夠?qū)刂破鱾魉偷臄?shù)據(jù)進行使用或者在得到控制器通知之后再去模型進行最新數(shù)據(jù)的提取。所以被動MVC模式下,控制器還要把模型更新之后的數(shù)據(jù)傳送給視圖,因而在設計上相較于主動MVC更加困難。
2 基于MVC設計模式的開發(fā)框架建設與改進
2.1 框架入口設計
傳統(tǒng)的Web應用程序中,一般是以頁面或者文件為基礎的,接入模式一般采取多點接入。這種接入模式可以讓用戶對系統(tǒng)的文件進行直接訪問,并且這些文件可以對用戶的請求進行處理并把這些處理的結果反應給用戶[7]。一個系統(tǒng)請求入口就有很多。這種接入方式給用戶顯示的接口非常多,容易帶來安全隱患,對全局的處理、優(yōu)化等起了不利影響。
在MVC設計模式上實現(xiàn)的THINKPHP框架,可以實現(xiàn)傳統(tǒng)的多點接入模式,同樣也可以進行配置,設置成為單點接入模式。
單點接入模式把Web應用應用程序的全部請求都集中到一個腳本文件即所有的HTTP請求都由入口文件統(tǒng)一進行接受。用戶和系統(tǒng)進行交互的入口只有這一個。這種接入模式具有許多優(yōu)點,其一,方便全局處理,如對數(shù)據(jù)進行安全監(jiān)測等。其二,可以使程序結構更加清晰,方便進行管理。入口進行集中控制,程序人員只需要負責開發(fā)自己的模塊就可以,們不需要對程序運行進行協(xié)調(diào)。其三,保證安全,采用單點入口模式,只開放需要開放的模塊,模塊的訪問地址都是同一個php文件,用戶難以辨別,可以保證系統(tǒng)的安全性。另外,單點接入也使系統(tǒng)的一些耦合缺陷不對用戶進行開放。相對于多點接入模式來講,多點模式采用不同的php文件訪問web,URL相對簡單整潔,但是不方便同一控制,即便可以使用公用配置文件,倘若項目太大,公用配置也不是好的解決方案。
2.2 控制器設計
在MVC設計模式中,控制器主要作用是負責接受用戶輸入的數(shù)據(jù)并調(diào)用模型和視圖功能去完成用戶提出的需求。當用戶通過web頁面中的超鏈接和發(fā)送HTML表單時,控制器本身不做任何處理,也不會輸出任何東西。它只接受請求并決定調(diào)用哪個模型構件去處理請求,然后決定用哪個視圖來顯示模型處理返回的結果[8]。
THINKPHP的控制器層由核心控制器和業(yè)務控制器組成,核心控制器由系統(tǒng)內(nèi)部的App類完成,負責應用(包括模塊和操作)的調(diào)度控制,包括HTTP請求攔截和轉發(fā)、加載配置等;業(yè)務控制器則由用戶定義的Action類或者其他控制器類完成。關鍵代碼如下:
…
if(defined('GROUP_NAME')){
if(is_file(CONF_PATH.GROUP_NAME.'/config.php'))
C(include CONF_PATH.GROUP_NAME.'/config.php');// 加載分組配置文件
if(is_file(COMMON_PATH.GROUP_NAME.'/function.php'))
include COMMON_PATH.GROUP_NAME.'/function.php';// 加載分組函數(shù)文件
}
…
業(yè)務控制器把客戶請求和業(yè)務邏輯分開,業(yè)務控制器是由用戶自定義的Action.php文件來實現(xiàn)的,業(yè)務控制器全部由Action類派生而來,繼承了所有Action類的方法,把數(shù)據(jù)傳送給視圖的抽象方法是$this->display。關鍵代碼如下:
…
class Abstract extends Action {
public function index(){
$this->display();
}
}
…
2.3 數(shù)據(jù)操作
PHP支持的數(shù)據(jù)庫眾多,典型的數(shù)據(jù)庫就是 MySql,對于接口支持不具有統(tǒng)一性[9]。
THINKPHP框架對數(shù)據(jù)庫增刪改操作進行了封裝,簡化了數(shù)據(jù)庫操作,使得開發(fā)人員不需要學習SQL語句的相關語法,只需使用GetLastSql()指令將需要操作的SQL語句輸出到瀏覽器調(diào)整即可。開發(fā)人員可以有更多的精力用在系統(tǒng)業(yè)務邏輯上,不再考慮SQL的語法。進行簡單封裝還降低的程序的書寫錯誤,降低了調(diào)試出錯概率。
2.4 視圖技術
在THINKPHP中,利用視圖模板技術把數(shù)據(jù)層、HTML表示層代碼進行分離。Web服務器接收URL請求之后,首先需要確認的是不是第一次對URL進行請求,第一次請求的URL,首先對模板進行調(diào)用,判斷模版主題,然后再由控制器代碼等進行編譯,最后用戶視圖生成數(shù)據(jù)并輸出;不是第一次則在已具有的用戶視圖上進行直接定位,也要判斷模版主題,這種請求節(jié)省解析以及讀取的時間??蚣軙瓜到y(tǒng)偽靜態(tài)化,考慮使用rewrite篩選器完成。加快了程序的運行速度,提高了效率。關鍵代碼如下:
function isMobile() {
// 如果有HTTP_X_WAP_PROFILE則一定是移動設備
if (isset ($_SERVER['HTTP_X_WAP_PROFILE'])){
return true;
}
return false;
}
$info=isMobile();
if($info){ $theme = 'phone'; //手C模板
}else{$theme = 'default'; //默認模板
}
3 結語
關鍵詞:Spring MVC框架;Web登錄系統(tǒng);B/S架構;session對象
1 概述
隨著世界經(jīng)濟的繁榮和科技的迅猛發(fā)展,信息化的程度越來越高,各種軟件相繼出現(xiàn)。大批量種類繁多的軟件雖然提高了信息處理的效率,但是安全方面的隱患也日益突出。用戶想要進入到不同的應用軟件和服務系統(tǒng)時都必須進行登錄認證,隨之而來的遺忘密碼、黑客攻擊、密碼泄露等問題,都將嚴重干擾到業(yè)務運作。在這種情況下,一種安全可靠的用戶登錄模塊就顯得必不可少。
基于這種情況,該文研究了如何利用Spring MVC框架開發(fā)一款安全、靈活的Web登錄模塊。系統(tǒng)的任何用戶操作界面都可以提供登錄入口,提示用戶進行登錄,通過認證后,合法用戶就可以使用他相應的權限功能。
2 Spring MVC框架概述
Spring是分層的Java SE/EE應用一站式的輕量級開源框架,是為了解決企業(yè)應用程序開發(fā)復雜性而創(chuàng)建的。Spring框架提供了構建Web應用程序的全功能 MVC 模塊。在Spring的MVC中,支持各種視圖技術,例如JSP、Velocity、Tiles等。Spring MVC分離了控制器、模型對象、分派器以及處理程序?qū)ο蟮慕巧?,這種分離讓它們更容易進行定制。
Spring MVC的角色劃分非常清晰,各組件的功能單一,很好地達到了高內(nèi)聚低耦合的效果。Spring MVC相當靈活,且可以擴展,其MVC框架是圍繞 DispatcherServlet這個核心展開的。核心控制器的作用就是截獲請求,并將其分發(fā)到相應的業(yè)務控制器中,由業(yè)務控制器調(diào)用業(yè)務處理方法處理業(yè)務邏輯,返回一個模型和視圖對象,核心控制器再根據(jù)此對象找到視圖顯示出處理結果。
3 登錄模塊的設計與實現(xiàn)
本登錄模塊采用B/S的三層結構模式,分為服務器、用戶和數(shù)據(jù)庫三個部分。客戶端與服務器之間采用HTTP協(xié)議進行通信,Web服務器采用Tomcat6.0,數(shù)據(jù)庫服務器采用Oracle10.0.2。在用戶登錄模塊的開發(fā)過程中,提供對身份認證、權限分配等有效的安全策略,來實現(xiàn)用戶的驗證與登錄,在沒有得到系統(tǒng)授權的前提下是無權對文檔進行瀏覽和管理的。
3.1 總體設計
用戶登錄模塊按照不同的人員職責,提供不同的登錄界面,具體包括系統(tǒng)管理員、管理員、游客等登錄界面。有游客,管理員,身份證,電話號碼+密碼等多種登錄方式。
登錄模塊采用基于角色的身份認證技術,根據(jù)不同的用戶角色,提供不同的登錄選項,分配不同的使用權限。根據(jù)實際情況定義了三種角色:超級管理員、管理員、注冊用戶,通過登錄界面確認用戶的身份,再根據(jù)不同的用戶類型確定其相應的操作權限。
其中,超級管理員具有對角色、權限、菜單等進行增刪改查操作以及角色的賦權。管理員具有對用戶賬號管理,信息的修改、統(tǒng)計等處理權限。注冊用戶具有修改個人資料,信息瀏覽等權限。
3.2 數(shù)據(jù)庫配置
public UserInfo getUserByUserName(String userName){
UserInfo userInfo=null;
try{
userInfo=(UserInfo)
getSqlMapClientTemplate().queryForObject("USERINFO.getUserByUserName", userName);
}catch(Exception e){
logger.error(e);}
return userInfo;}
3.3登錄模塊的實現(xiàn)
本模塊登錄時沒有區(qū)分用戶角色,當進入系統(tǒng)后根據(jù)角色權限加載菜單項。用戶通過輸入用戶名和密碼,然后單擊登陸按鈕實現(xiàn)以上信息的提交并驗證,若正確無誤進入系統(tǒng)。
3.3.1錯誤鎖定
登陸模塊根據(jù)用戶身份進入系統(tǒng),顯示擁有權限的操作菜單。如果用戶不存在,則找不到數(shù)據(jù);如果用戶存在,密碼錯誤,同樣找不到數(shù)據(jù),均提示用戶名密碼錯誤;如果用戶名和密碼同時存在,則獲取用戶信息,并進入相應的界面。為系統(tǒng)安全考慮,若用戶連續(xù)而且超過三次輸入密碼錯誤,則需要輸入驗證碼。errorTime為輸入錯誤次數(shù),當驗證碼輸入為空,或輸入錯誤,就返回-1,此時對該賬號鎖定, 登錄失敗,必須經(jīng)過超級管理員解鎖才能重新使用。部分代碼分析如下:
if(errorTime>=3){
if(entryVlidateCode==null||(!entryVlidateCode.equals(realValidateCode))){
map.put("errorMsg","驗證碼錯誤");
map.put("userInfo",null);
map.put("errorCode",-1);
return map;
}}
3.3.2在線提示
用戶在登錄時,會創(chuàng)建一個session,用于保存用戶信息。如果在線用戶列表中查找到該用戶已經(jīng)在線,同時又在其他機器登錄,那么首先提示用戶已經(jīng)在線,然后給出選擇擠下或者取消登錄。如果擠下,那么被擠機器就無法繼續(xù)前后臺的數(shù)據(jù)交互,自動退出,登錄失敗。也就是限制用戶重復登錄,每個時刻只允許在一臺機器上登錄。
先從ServletContext中取出存放用戶登錄的session相關信息,檢查這個列表,若已經(jīng)存在相同的登錄信息,則說明用戶之前已經(jīng)登錄過,移除前面一條記錄。再把此次登錄的信息加入到ServletContext中。監(jiān)聽實現(xiàn)SessionListener類,當session失效的時候,從ServletContext中移除相應記錄。過濾所有頁面,sesison失效后轉向登錄頁面。但是要實現(xiàn)用戶二次登錄后強制先前的登錄失效,需要在這里控制。登錄時存入的是session值和session ID,用戶二次登錄時移除了前次記錄,存入的session值是相同的,但是ID卻不同。 當?shù)谝淮蔚卿涰撁嬲埱蟮臅r候,在這里檢查ServletContext中是否存在當前的session值與ID,如果沒有就銷毀這個session。
3.3.3非法退出
對于WEB系統(tǒng)來說,均遵循HTTP協(xié)議的請求/應答模型。所以網(wǎng)站本身是不能保存數(shù)據(jù)的,用戶正確登錄后,系統(tǒng)更改當前用戶的狀態(tài)為在線。如果用戶在使用系統(tǒng)時,不通過退出按鈕來執(zhí)行退出操作,而是非法退出,包括網(wǎng)絡斷線、系統(tǒng)癱瘓、突然斷電等情況。這些都使系統(tǒng)沒有給用戶記錄一個退出系統(tǒng)的操作機會,這種情況下用戶的在線狀態(tài)會一直保留,從而影響下次登錄。因此,系統(tǒng)應該設置一個定時器,定時清理并且還原用戶的初始狀態(tài)。
當用戶以登陸身份請求服務器資源時,記錄用戶的最后活躍時間。接著擬定一個失效時間,假設某個用戶的最后活躍時間和當前時間的差值大于這個失效時間,也就是說該用戶這一段時間都沒有和服務器交互了,那么就認為該用戶已下線,否則認為他是在線的。
3.3.4超時管理
Session對象是由服務器自動創(chuàng)建的與用戶請求相關的對象。服務器為每個用戶都生成一個session對象,用于保存該用戶的信息,跟蹤用戶的操作狀態(tài)。應用session對象時要注意它的生命周期,當用戶首次訪問時將產(chǎn)生一個新的會話,從用戶打開網(wǎng)站生成,關閉瀏覽器刪除,以后服務器就會記住這個會話狀態(tài),在這一段時間內(nèi),用戶都可以訪問到會話對象中保存的信息。當會話生命周期超時,或者服務器端強制使會話失效時,這個session就不能使用了,需要用戶重新登錄。
通過setMaxInactiveInterval()方法可以設置Session的生命周期,通過getMaxInactiveInterval()方法可獲得Session的生命周期,如果超過這個時間則失效。
4 結束語
信息的規(guī)范化、高效化管理在很大程度上體現(xiàn)了一個組織的工作效率,而登陸功能在其中起到了關鍵性作用,同時也為系統(tǒng)提供了安全性保障。該文對Web登錄模塊進行了分析,使用Spring MVC框架進行設計,提出了解決方案,實現(xiàn)了系統(tǒng)用戶的登錄、出錯處理、超時檢查等功能,使系統(tǒng)的重用性和擴展性更好,用戶界面簡潔統(tǒng)一,功能靈活,提高了系統(tǒng)的易用性、安全性及穩(wěn)定性。
參考文獻 :
[1] 劉震宇,肖武魁.基于J2EE框架與ExtJS的Web系統(tǒng)登錄設計[J].中南林業(yè)科技大學學報,2010(8).
[2] 張瑞青,李鐵柱.基于SpringMVC的用戶登錄系統(tǒng)的設計與實現(xiàn)[J].科技信息,2012(10).
關鍵詞:評教系統(tǒng);LINQ;UML;MVC
中圖分類號:TP311 文獻標識碼:A文章編號:1007-9599 (2011) 12-0000-01
Online Teaching Evaluation System Design and Implementation 3.5 MVC Framework
Chen Liang
(Changsha Normal College,Changsha410100,China)
Abstract:In this paper,**College for example,in-depth analysis of the school's teaching evaluation system status and system requirements,the use of software systems development ideas and methods for the evaluation of teaching overall system analysis and detailed design.Platform using Visual Studio 2008 features,take B/S architecture,the C# language development,database selection Sql Server 2008.Framework for MVC framework support,let us see more of the highlights,so we use the MVC framework to design the web front system,let the workload in many ways to save,MVC's relatively independent,so that the program the operating mechanism is more clear,structured,low coupling,but also increase the program's scalability.
Keywords:Teaching evaluation system;LINQ;UML;MVC
信息是人們對世界的客觀的描述,是人們進行聯(lián)系與交流的重要途徑。伴隨著社會信息技術的提高,計算機已被廣泛運用到許多的領域,成為推動社會發(fā)展的動力,而在軟件技術的應用中,軟件的開發(fā)技術,尤其是應用型軟件的開發(fā)已經(jīng)成為重中之重。
一、關于評教系統(tǒng)的概述
對績效考評,管理學界沒有一個統(tǒng)一的定義,但管理學者們從不同的角度,不同的側重點對這一概念作了不同的描述。評教系統(tǒng)就是學生對教師的能力、工作狀況和適應性,對職工的個性、資質(zhì)、習慣和態(tài)度,以及對組織的相對價值進行有組織的、實事求是的評價,包括評價的程序、規(guī)范、方法的總和。
二、系統(tǒng)的總體設計
(一)系統(tǒng)的功能。評教系統(tǒng)主要實現(xiàn)的功能有:教研室管理、教師管理、評分角色管理、學年學期管理、考核管理、考核角色管理、指標管理、教員被評角色、教員評分角色、考核評分、一級指標得分瀏覽、二級指標得分瀏覽、三級指標得分瀏覽功能。
(二)系統(tǒng)的架構。主要采用三層架構來設計,三層架構的結構如下圖:
1.表示層。表示層提供給用戶一個視覺上的界面,通過界面層,用戶輸入數(shù)據(jù)、獲取數(shù)據(jù)。2.邏輯層。是表示層和數(shù)據(jù)層的橋梁,它響應界面層的用戶請求,執(zhí)行任務并從數(shù)據(jù)層抓取數(shù)據(jù),并將必要的數(shù)據(jù)傳送給界面層。3.數(shù)據(jù)層。數(shù)據(jù)層定義、維護數(shù)據(jù)的完整性、安全性,它響應邏輯層的請求,訪問數(shù)據(jù)。這一層通常由大型的數(shù)據(jù)庫服務器實現(xiàn),如Oracle、Sybase、MS SQl Server等。
(三)教評系統(tǒng)功能模塊的實現(xiàn)。由于整個系統(tǒng)的系統(tǒng)功能十分相近,我們不一一展開敘述,此處我們以評分角色管理模塊為例來研究具體是如何實現(xiàn)的,其他模塊實現(xiàn)方法類似。
1.方法的定義。在評分角色管理模塊中有個頁面用來實現(xiàn)顯示評分體系內(nèi)所有的指標的功能。這里在后臺實際上是調(diào)用了一個Get More Topic List(recount,gid)方法,該方法將返回值一個List的鏈接表類。按照系統(tǒng)的業(yè)務設計邏輯,本系統(tǒng)中,方法的調(diào)用要經(jīng)過三層間的逐層調(diào)用。最開始是在數(shù)據(jù)存儲層定義方法體,在事物層中定義方法接口,最后在表現(xiàn)層中調(diào)用。然而,表現(xiàn)層的每個方法調(diào)用,調(diào)用后再發(fā)送請求到事務接口層。事務接口層對該方法定義了接口,具體如下:
public ListGet More Topic List(int number,int gid)
{return dal.Get More Topic List(number,gid);}
此處return dal.Get More Topic List(number,gid)調(diào)用則是去實現(xiàn)接口的方法,完整的方法體則是數(shù)據(jù)層來實現(xiàn)的。數(shù)據(jù)層內(nèi)對相關的SQL語句進行了表達,并返回對應的數(shù)據(jù),逐條轉換為之前定義的Group Topic Info類,然后形成鏈表,最后將鏈表返回。這一連串的跳轉,充分展示了方法在這個層次框架中的運行調(diào)用機制。
2.頁面構造。后臺信息發(fā)送到前臺后,必須充分的展現(xiàn)出來。這里運用到NVelocity模板語言。該語言是嵌入在HTML中的,能直接將后臺的變量賦值給前臺,使前臺可以實現(xiàn)許多復雜的操作。我們以考評系統(tǒng)內(nèi)的評分角色管理的頁面為例,后臺得到了一個Group Topic Info的鏈表,Group Topic Info類型雖然在后臺定義過,然而前臺還是無法識別,所以需要在后臺將Group Topic Info鏈表轉化為一個前臺能夠進行展現(xiàn)的HTML的應用的類別,必須兼容html語言。然后通過context.Put("infolist",infolist)將鏈表賦值給前臺的NVelocity中的鏈表。前臺接受到數(shù)據(jù)后,通過一個#foreach($infoin$infolist)循環(huán),將鏈表的值逐一賦值給展示系統(tǒng)的變量,通過泛型變量依依顯示出來。
四、結語
教評系統(tǒng)在教學管理中的重要地位日益突顯。當然,一個科學合理的評教系統(tǒng)體系的設計還包括選用科學的設計方法,對指標體系的更新完善等等多個方面,是一個系統(tǒng)的工程。但基于自身知識所限無法一一具體加以說明,以上論述,是個人在學習實踐工作中的真實體驗,請各位讀者斧正。
參考文獻:
[1]王嫻,謝弛,榮雪,范雯.SNS走向何方――SNS網(wǎng)站運營的現(xiàn)狀和未來趨勢研究[J].2008
[2]張祖曦.基于SNS社區(qū)的人際搜索設計與實現(xiàn)[J].2009
[3]Framework3.5開發(fā)技術詳解[M].人民郵電出版社,2009
[4]梁冰.JavaScript開發(fā)技術大全[M].北京:人民郵電出版社,2008
關鍵詞:PureMVC框架 角色 訪問控制
中圖分類號:TP393.09 文獻標識碼:A文章編號:1007-3973 (2010) 07-042-02
1引言
訪問控制是指通過某種途徑,允許或限制訪問能力及其范圍的一種方式。近年來,一種新的基于角色的訪問控制技術(role-based access control,RBAC)正逐漸成為信息安全領域內(nèi)的研究熱點。目前已提出并得到較廣泛認可的模型是美國Sandhu 教授等人的RBAC96 模型。
RBAC 的基本思想是將角色作為用戶與權限聯(lián)系的中間橋梁,用戶通過被授予一定的角色而獲得相應權限,從而大大簡化權限管理。
本文針對一個合作共建系統(tǒng)的權限管理,基于PureMVC框架進行了設計和實現(xiàn)。
2PureMVC框架
PureMVC是在基于模型、視圖和控制器MVC模式建立的一個輕量級的應用框架,這種開源框架是免費的,是一個定位于設計高性能RIA客戶端的基于模式的框架。
PureMVC是一個定位于高性能RIA客戶端的機遇模式的框架,PureMVC框架的核心是廣播式的通信機制,接收者只要注冊標識與廣播消息的標識一致,就會接收消息,由于這種通信機制比較通用,現(xiàn)在已經(jīng)被移植到大多數(shù)流行的開發(fā)平臺,包括Flash/Flex、PHP、Java、C#等。
2.1PureMVC框架
PureMVC模式通常被分成經(jīng)典的低耦合三層:Model、View、Controller,這三部分由3個單例模式來管理,三者合稱為核心層或核心角色。
(1)整體結構中Facade負責管理整個應用,注冊Command并建立Notification映射。Facade是一個單例類,是MVC框架中最核心的功能類,Facade單例負責對3個核心層的初始化,并且能訪問各層類的公共方法。其中Mediator、Controller和Proxy均可以發(fā)送通知,但Proxy不接受通知,不和Mediator進行直接的交互。
(2)數(shù)據(jù)層Model指向Proxy的引用。Proxy代碼負責操作數(shù)據(jù)模型,與遠程服務通信存取數(shù)據(jù),是真正處理數(shù)據(jù)的地方,視圖層展現(xiàn)或提交的數(shù)據(jù)都回到Proxy處理,處理后的結果通知視圖層的Mediator,然后Mediator決定是否更改用戶界面。
(3)視圖層View負責軟件展現(xiàn)給終端用戶的界面,視圖指向Mediator引用,由多個Mediator組成。Mediator通過Controller和Proxy進行通訊,所有行為都是建立在Notification基礎上的,一個對象處理完自己的事務后,簡單發(fā)送通知到外界就可以了,至于誰去處理隨后的事情就交給注冊了這個通知的對象去處理。
Mediator管理視圖組件,負責和控制器的Command或者數(shù)據(jù)模型的Proxy交互,是操作顯示組件(View Components)的控制器,通過事件監(jiān)聽操作視圖組件,Mediator對于用戶在界面的操作,均發(fā)送事件通知其Mediator,由Mediator決定是否發(fā)送通知(Notification)給控制器去處理數(shù)據(jù)或者是獲得數(shù)據(jù)。而Mediator在接受了其他地方發(fā)來的通知后,也會管理界面是否做響應的更新。
(4)控制層Controller包括命令類及其映射,負責處理業(yè)務邏輯、聯(lián)系數(shù)據(jù)層和視圖層,由多個Command組成。其中命令類是無狀態(tài)的,只有需要時才被創(chuàng)建。
2.2PureMVC框架特點
PureMVC的主要目標是分離代碼為三個簡單、實用、離散的層,即模型(Model)、視圖(View)和控制器(Controller),以減少由應用層、類的作用等造成的程序混亂,平衡可維護性與可擴展性之間的關系,對開發(fā)者隱藏復雜性,避免平臺依賴性。
使用PureMVC框架進行開發(fā)具備下列好處:
(1)基于設計模式,支持已經(jīng)被時間所證明的設計模式,可以部署于任何具備支持面向?qū)ο蟮沫h(huán)境,模式簡單易懂。
(2)框架是“即開即用”的,只需要很小的實現(xiàn)需求。
(3)松耦合架構,提供可復用的組件、模型數(shù)據(jù)對象和服務,包含/訂閱風格的通知,建立明確的分離客戶端三層編碼關系。
(4)面向接口的編程,框架支持子類或?qū)崿F(xiàn)接口的擴展,對所有的框架類定義接口,所有的類基于可擴展性思想,框架支持將來通過其他類庫以分組模式進行擴展,并且與核心包的模式互不依賴。
(5)完備的文檔。源代碼免費開放,具有完備的源代碼文檔,概念和統(tǒng)一建模語言(UML)視圖。
2.3PureMVC框架的模式和結構
2.3.1MVC模式
MVC模式實現(xiàn)了模型、視圖、控制的分離,其框架如圖1所示,這種模式使得代碼的管理更加有效,更加清晰,也會減少代碼的維護量。
圖1MVC模式框架圖
2.3.2PureMVC結構
PureMVC是一個純粹的小巧的MVC框架,在PureMVC中,整個框架由3個單例模式來管理,除了3個核心層之外,另外還有一個單例模式類――Facade,它提供了與核心層通信的唯一接口,以簡化開發(fā)的復雜度。圖2 所示為PureMVC的整體框架結構。
圖2PureMVC 結構圖
3角色訪問控制的實現(xiàn)
本文是以多家合作開發(fā)的B/S模式的網(wǎng)站為例,采用Adobe公司的Flex開發(fā)環(huán)境實現(xiàn)了用戶角色訪問控制功能,根據(jù)用戶的不同以及角色的差異進行權限控制,主要包括以下幾部分:用戶管理,角色管理和權限管理。
(1)Facade類的創(chuàng)建。本例中實現(xiàn)了一個的單例模式類RoleFacade類,它繼承了Facade類應用單例模式,負責初始化核心層(Model,View和Controller),注冊所有Model和View的Command類,并能訪問其Public方法。
public class RoleFacade extends Facade
implements IFacade{
//獲取RoleFacade的實例
public static function getInstance():
RoleFacade;
//重載基類initializeController方法,初始化控件
override protected function initializeController( ) : void {
//調(diào)用子類構造函數(shù)
super.initializeController();
//注冊控制器
registerCommand(AddRoleCmd);
……
}
}
(2)由于業(yè)務邏輯相對簡單,本例中通過SimpleCommand實現(xiàn)了ICommand接口,通過execute方法接受一個Inotification實例作為參數(shù),在實際應用中,重寫了Notification的引用。以刪除用戶為例:
DeleteUserCommand
extends SimpleCommand
implements ICommand {
override public function execute( notification:INotification ){
對Notification的引用
//刪除用戶、角色
userProxy.deleteItem( user );roleProxy.deleteItem( user );
//發(fā)送通知
sendNotification(RoleFacade.USER_DELETED );
}
}
(3)數(shù)據(jù)模型Proxy封裝了數(shù)據(jù)模型,管理對本地數(shù)據(jù)的訪問,實現(xiàn)權限的管理。Proxy類暴露數(shù)據(jù)模型和實體類給應用程序,通過sendNotification方法,使用一個IFacade接口的單例去廣播,使得程序可以被其它地方被復用或重構。
Proxy類的protected屬性被初始化用于注冊IFacade實例,因此Mediator在主程序初始化Facade實例后被注冊。
本例中有兩個對應的類,分別是用戶和角色。
public class RoleProxy extends Proxy implements IProxy
public class UserProxy extends Proxy implements IProxy
(4)視圖層Mediator保存了多個視圖組件的引用,通過其自身提供的API管理它們,因為經(jīng)常和Proxy交互,所以在構造方法中取得Proxy實例的引用并保存在Mediator的屬性中,這樣避免頻繁的獲取Proxy實例。
本例中存在兩個Mediator,分別是對應角色的RolePanelMediator和對應于用戶的UserFormMediator。
roleProxy = facade.retrieveProxy( RoleProxy.NAME ) as RoleProxy;
(5)主入口文件中構建用戶界面結構,包括用戶列表,角色列表和權限列表,然后建一個UsedFacade類的對象實例進行控制。
import lalo.ApplicationFacade;
private var facade:UsedFacade
= UsedFacade.getInstance();
4結語
框架給應用帶來的好處是不言而喻的,PureMVC作為一個輕量級采用通知驅(qū)動的框架,實現(xiàn)了松耦合結構?;诮巧L問控制原理,本文以一個合作B/S系統(tǒng)為例設計實現(xiàn)了對角色的訪問控制,提高了系統(tǒng)安全性,實際應用表明,該系統(tǒng)具有較好的可擴展性和通用性。但是對于角色的控制還沒有與數(shù)據(jù)庫的訪問控制相結合,下一步的工作將結合數(shù)據(jù)庫訪問控制模型圍繞角色、權限、數(shù)據(jù)庫三級訪問控制展開。
參考文獻:
[1]RAVI S S, EDWARD J C, HAL L F. Role-based accesscontrol model[J]. IEEE Computer, 1996, 29(2): 38-47.
Java語言自從推出以來一直是最流行的編程語言,社會上越來越多的開發(fā)人員利用Java技術進行軟件開發(fā),也出現(xiàn)了越來越多的Java框架,為了提高軟件開發(fā)的質(zhì)量和效率,降低軟件復雜度,需要選擇合理的框架搭建軟件架構,并且需要相應的技術進行項目的構建和管理,本文研究適合中小企業(yè)軟件開發(fā)的輕量級的Java軟件架構,并采用流行的項目管理工具Maven管理軟件開發(fā),以降低軟件開發(fā)的難度。
1 多種軟件架構的比較
1)早期的Java企業(yè)級開發(fā)采用框架重量級EJB(Enterprise JavaBean)。EJB是定義了一個用于開發(fā)基于組件的企業(yè)多重應用程序的Java EE標準。因為EJB容器默認為應用提供了EJB規(guī)范中的所用功能,以它為架構的應用程序需要消耗大量資源,具有侵入性,所以是一種重量級框架。
比如,EJB啟動的時候,需要消耗大量的資源,內(nèi)存,CPU等。其次還表現(xiàn)在EJB巨大而復雜的規(guī)格說明以及代碼規(guī)范?,F(xiàn)在的EJB3.0增加了許多新的規(guī)范,例如元數(shù)據(jù)支持,實體Bean模型訪問Bean上下文的新方法和運行時環(huán)境等,但是EJB仍然具有過于復雜的特性。
基于重量級框架EJB的軟件架構沒有很好的靈活性來應對需求的變化,缺乏實用性,所以隨著SOA和其它力量的興起,軟件開發(fā)也越來越多地選擇輕量級的部署平臺。
2)常見的輕量級組合框架采用Struts2、Spring和Hibernate設計。Struts2是一個主流的基于MVC模式的Web開發(fā)框架,該框架包括三部分:核心的控制器組件、業(yè)務控制器和用戶實現(xiàn)的業(yè)務邏輯組件。
其中,Struts2框架提供了核心控制器,用戶實現(xiàn)業(yè)務控制層和業(yè)務邏輯層,具體實現(xiàn)時業(yè)務邏輯層采用面向接口編程;Hibernate是一個基于Java的對象關系映射(ORM)開源框架,對底層的JDBC進行了非常輕量級的封裝,開發(fā)人員通過它可以使用面向?qū)ο蟮木幊趟枷氩僮鲾?shù)據(jù)庫。
使用JDBC的應用都可以用Hibernate替代,并且Hibernate可以取代重量級EJB在Java EE架構中的應用,完成數(shù)據(jù)持久化操作;Spring是為了降低企業(yè)應用開發(fā)的復雜性而創(chuàng)建的輕量級Java開源框架。
Spring框架的采用分層架構,分層架構的優(yōu)點是使用者根據(jù)需求選擇使用其中的組件,并且可以提供集成的框架。Spring通過核心的控制反轉(IoC)和面向切面(AOP)功能,使用簡單的JavaBean來完成以前由重量級EJB完成的應用。
Spring的應用不僅限于服務器端,任何的Java應用都可以選擇需要的Spring功能模塊。所以,Spring是一個分層的一站式輕量級開源框架。
Struts2、Hibernate、Spring組合的輕量級架構如圖1所示。
3)目前流行應用Spring MVC完成Web開發(fā)。Spring的輕量級和低入侵性使得其應用越來越多,由此發(fā)展了Web模塊,融合在Spring Web Flow里面,即Spring MVC。
Spring MVC是提供了構建 Web 應用程序的全功能MVC模塊。該功能和Spring其他功能一樣是一種可插入的MVC架構[1]。Spring MVC輕量級框架側重于減小開發(fā)的復雜度,比較適用于開發(fā)中小型企業(yè)應用。所以在使用Spring進行Web開發(fā)時,越來越多的使用SpringMVC框架取代集成其他MVC開發(fā)框架(如Struts2)。
2 輕量級軟件架構的搭建
基于了Spring和Hibernate輕量級的特點,采用Spring MVC和hibernate整合完成分層的輕量級軟件架構,應用Hibernate的對象持久化功能進行域模型層和DAO(Data Access Object)層的實現(xiàn),應用Spring MVC定義控制層(Controller)和視圖層,應用Spring的對象管理功能管理DAO層、服務層(Service)和控制層的對象,降低軟件組件間耦合性。
在進行Spring、Spring MVC和Hibernate輕量級架構搭建時,為使應用耦合度低不依賴其他容器,采用基于簡單Java對象的方法,這可以提高軟件的開發(fā)調(diào)試效率。具體搭建該輕量級軟件架構需要注意以下幾點。
1)導入Spring和Hibernate及其他功能(例如數(shù)據(jù)庫驅(qū)動)的支持Jar包。
2)Spring MVC的核心是DispatcherServlet,,這個Servlet充當Spring MVC的前端控制器,必須在web.xml中進行配置。
3)必須定義基于這個servlet名字的XML文件,DispatcherServlet在加載時會從該文件中加載Spring上下文。
4)定義相應功能的處理類和返回視圖。
采用的輕量級框架Spring和Hibernate都是基于Java的開源框架,在開源社區(qū)中為這些框架提供了成熟的API和許多快速構建工具以及可供參考的開源代碼,這更利于軟件的快速開發(fā)。
3 Maven的應用
在進行輕量級的軟件架構開發(fā)項目的過程中,還必須有良好的項目管理工具。Maven是一款通過簡短的描述信息來管理項目的構建,報告和文檔的軟件項目管理工具,它的核心是基于項目對象模型(POM)。Maven包含了一個項目對象模型、一組標準集合、一個項目生命周期、一個依賴管理系統(tǒng)和用來運行定義在生命周期階段中插件目標的邏輯。
應用Maven,可以用一個明確定義的項目對象模型來描述項目,然后Maven可以應用橫切的邏輯,這些邏輯來自一組共享的(或者自定義的)插件。Maven可以讓開發(fā)人員快速地構建一個項目,有效地解決包管理和項目問題,并且可以與持續(xù)集成進行無縫對接。對于大型的系統(tǒng),采用Maven 作為項目管理工具,可以有效地進行分工協(xié)作[2]。
Maven的這種應用無侵入性,本身就是輕量級軟件架構的需要。
將Maven應用于基于Spring MVC的輕量級軟件架構,可以有效的提高項目開發(fā)進度,降低項目復雜度,主要方法為以下幾種。
1)為項目定義pom.xml文件,該文件中定義了項目對象模型,是Maven腳本的基礎,這個模型定義了項目的各種屬性,腳本都是基于該模型工作;此外在對象模型中對所依賴的包有明確的定義,如定義使用哪個版本的包。
2)Maven是基于中央倉庫的編譯,即把編譯所需要的資源放在一個中央倉庫里,如jar,tld,pom,等。當編譯的時候,Maven會自動在倉庫中找到相應的包,如果本地倉庫沒有,則從設定好的遠程倉庫中下載到本地。這一切都是自動的,并且用maven編譯的項目在的時候只需要源碼,小得很,使得項目更加輕量級。
3)Maven還為項目提供了大量的附加腳本降低項目開發(fā)的復雜性,例如生成網(wǎng)站、生成文檔、源代碼參考手冊等,利用Maven只需運行相應腳本。
4 結論
良好的軟件架構和項目管理工具是軟件開發(fā)成功的基礎,不僅能夠降低開發(fā)難度,節(jié)約開發(fā)成本,還能夠極大的提高軟件的可擴展性和可維護性?;赟pring、Spring MVC和Hibernate搭建的軟件架構以控制器、模型和視圖(MVC)為基礎,對底層JDBC進行對象封裝,提供業(yè)務模型基礎,并應用分層和按需集成方式開發(fā)web應用;Maven服務于基于Java平臺的項目構建、依賴管理和項目信息管理,來降低系統(tǒng)各個模塊之間的耦合度,使得代碼的復用性大大提高,可以實現(xiàn)項目的并行開發(fā),進一步提高系統(tǒng)開發(fā)的可擴展性及穩(wěn)定性,降低軟件開發(fā)難度。
摘 要:本文介紹MVC與三層結構技術的內(nèi)容和區(qū)別,包括MVC框架的結構和三層結構技術的內(nèi)容,并對兩者的主要應用(包括B/S架構下)進行闡述;對兩者結合設計軟件的應用和性能做了說明和論述。因為MVC與三層結構技術在軟件開發(fā)(尤其在Web技術下的數(shù)據(jù)庫系統(tǒng)開發(fā))具有的重要作用和地位,對其研究具有重要的現(xiàn)實意義。
關 鍵 詞:MVC ;三層結構技術;軟件框架;B/S;Web
1.MVC與三層結構技術簡介
MVC是一種軟件,是一種軟件框架[1]。軟件框架是對通用功能操作進行抽象的軟件,這些抽象的功能操作的代碼可以根據(jù)應用程序的功能要求有選擇的改變,并復用框架代碼,進而形成特定的應用軟件。
就是把一些通用的功能,通過開發(fā)平臺以代碼和架構的形式表示出來,開發(fā)者通過框架提供的接口進行功能開發(fā),可以復寫框架代碼,而不必從開始編寫??蚣芴峁┝艘恍┸浖δ艿哪J實現(xiàn),在特定的開發(fā)平臺下,就是說開發(fā)平臺已經(jīng)代替開發(fā)者實現(xiàn)了一些通用功能并提供了相應的代碼,開發(fā)者只需重寫或添加功能代碼。注意:框架內(nèi)部代碼不可重寫;應用程序流程必須在框架內(nèi)部。
三層結構技術[2]是一種設計架構模式,是一種軟件的設計思想。可以把軟件設計分為表示層、中間層和數(shù)據(jù)層,已利于軟件功能的設計和實現(xiàn),稱為三層結構技術。
框架給出了應用程序的體系結構,設計模式給出了具體設計的解決方案;設計模式可用不同語言和不同方式來實現(xiàn),而框架則是開發(fā)平臺給出的設計和代碼的混合體;設計模式與語言無關的,具體設計受制于開發(fā)平臺框架的具體實現(xiàn)環(huán)境。利用框架開發(fā)軟件應體現(xiàn)設計模式的基本思想,軟件設計模式思想的實現(xiàn)要選擇合適的軟件框架并受制于框架。
2.MVC結構
2.1組成
由Servlet(Controller)、JSP(View)、JavaBean(Model)三部分構成。Model是負責保持狀態(tài)、數(shù)據(jù)的應用組件,通常這個狀態(tài)持久于數(shù)據(jù)庫之中。View是負責用戶界面的組件(UI),通常這個UI是使用Model模型數(shù)據(jù)來創(chuàng)建的。Controller用來處理用戶交互,控制器行為(Action)用來完成用戶發(fā)過來的每一個請求,操作Model(模型)最終會選擇用哪個View(視圖)來顯示UI的組件。
2.2特點
視圖、控制和模型分離,近一步提高了復用程度,三者可以獨立變化,降低了耦合性并進一步提高了模塊的復用性;合作效率得到充分發(fā)揮,開發(fā)成員的分工界面更加清晰;當出現(xiàn)問題時更容易鎖定問題。
2.3結構
3.三層結構技術[3]
所謂三層體系結構,就基于Web的數(shù)據(jù)庫開發(fā)而言就是在客戶端與數(shù)據(jù)庫之間加入了一個中間層,也叫組件層。
而軟件設計的一般三層體系結構[4]分為:
(1)表現(xiàn)層(UI):就是展現(xiàn)給用戶的界面,即用戶在使用一個系統(tǒng)的時候展現(xiàn)在操作員或用戶的所見與所得及其過程。
(2)業(yè)務邏輯層(BLL):針對具體問題的操作,對數(shù)據(jù)庫系統(tǒng)而言也可以說是對數(shù)據(jù)層的操作,對數(shù)據(jù)業(yè)務邏輯處理和一些事務辦理。
(3)數(shù)據(jù)訪問層(DAL):該層所做事務是對數(shù)據(jù)庫直接操作,針對存儲數(shù)據(jù)進行數(shù)據(jù)的增添、刪除、修改、更新、查找等功能實現(xiàn)。 [ ]
完善的三層結構的要求是:修改表現(xiàn)層而不用修改邏輯層,修改邏輯層而不用修改數(shù)據(jù)層。這樣就為軟件設計提供了架構設計思想,利于代碼的模塊設計和功能的設計實現(xiàn),修改和重組。
4.三層結構在B/S上的應用
在Browser/Server三層體系結構下,應用軟件三層結構設計的軟件系統(tǒng)被分割為表示層(Presentation)、功能層(Business Logic)、數(shù)據(jù)層(Data Service)三個相對獨立的單元。
第一層:表示層,Web瀏覽器上的軟件設計。
表示層包含系統(tǒng)的顯示邏輯,位于客戶端。它的任務是由Web瀏覽器向網(wǎng)絡上的某一Web服務器提出服務請求,Web服務器對用戶身份進行驗證后用HTTP協(xié)議把所需的主頁傳送給客戶端,客戶機接受傳來的主頁文件,并把它顯示在Web瀏覽器上,相應數(shù)據(jù)由此被獲得和顯示。
第二層:功能層,具有應用程序擴展功能的Web服務器上的軟件設計,實現(xiàn)數(shù)據(jù)處理和事務處理。
功能層包含系統(tǒng)的事務處理邏輯,位于Web服務器端。它的任務是接受用戶的請求,首先需要執(zhí)行相應的擴展應用程序與數(shù)據(jù)庫服務器進行連接,通過SQL等方式向數(shù)據(jù)庫服務器提出數(shù)據(jù)處理申請,而后等數(shù)據(jù)庫服務器將數(shù)據(jù)處理和事務處理的結果提交給Web服務器,再由Web服務器傳送回客戶端。
第三層:數(shù)據(jù)層,數(shù)據(jù)庫服務器上的軟件設計,主要是對數(shù)據(jù)庫直接進行數(shù)據(jù)處理。
數(shù)據(jù)層含系統(tǒng)的數(shù)據(jù)處理邏輯,位于數(shù)據(jù)庫服務器端。其任務是接受Web服務器對數(shù)據(jù)庫數(shù)據(jù)操縱的請求,實現(xiàn)對數(shù)據(jù)庫查詢、修改、更新等功能,把運行結果和數(shù)據(jù)提交給Web服務器。
5.主要的MVC[5]
(1)Struts:Struts是Apache軟件基金下Takarta項目的一部分。Struts框架的主要架構設計和開發(fā)者是Craig R.McClanahan。Struts 是Java Web MVC框架中不爭的王者。
(2)Spring:Spring實際上是Expert One-on-One J2EE Design and Development 一書中所闡述的設計思想的具體實現(xiàn)。
(3)Hibernate:Hibernate是一個開放源代碼的對象關系映射框架,它對JDBC進行了非常輕量級的對象封裝,使得Java程序員可以隨心所欲的使用對象編程思維來操縱數(shù)據(jù)庫。
(4).NET:.NET MVC是微軟官方提供的以MVC模式為基礎的.NET Web應用程序 (Web Application)框架。
6.MVC與三層結構技術應用
傳統(tǒng)的軟件設計代碼繁瑣,代碼模塊間耦合性高,可重用性差,開發(fā)更簡潔地設計一款代碼整潔,耦合性低,可重用性更高,可擴展性更好的軟件,MVC與三層結構技術被采用。
目前大多數(shù)信息化系統(tǒng)都是面向Internet開發(fā)與部署的,其優(yōu)點是用戶易于操作、不受操作平臺限制、不受地域性制約,因此在各行各業(yè)得到廣泛的應用。而構建這些系統(tǒng)的技術主要有J2EE、.NET,表現(xiàn)技術主要有JSP、ASP.NET、PHP以及AJAX,它們多以表現(xiàn)層、業(yè)務層、數(shù)據(jù)持久層層次結構作為構建思想。J2EE的優(yōu)點主要表現(xiàn)在開源、安全性高、跨平臺性強、可移植性好、跨語言程度高,缺點是配置復雜;.NET的優(yōu)點主要表現(xiàn)在集成性好、簡化應用、支持Web服務、易于學習,缺點是操作平臺單一、局限性較強。本文采用.NET框架作為教學質(zhì)量評價系統(tǒng)的平臺支持技術,并使用ASP.NET MVC技術作為系統(tǒng)的主要開發(fā)技術;其根據(jù)MVC的特點分析教學質(zhì)量評價系統(tǒng),將MVC的模型-視圖-控制可分離的優(yōu)點應用到教學質(zhì)量評價系統(tǒng)中,并用AJAX技術應用到表現(xiàn)層實現(xiàn)頁面實時異步交換數(shù)據(jù),從而提高系統(tǒng)的可重用性、通用性和可擴展性。
二、關鍵技術分析
.NET框架主要包括公共語言運行庫和.NET框架類庫,支持生成和運行下一代應用程序和 XML Web Services 的內(nèi)部Windows組件,用于提供應用程序開發(fā)的基礎設施。而ASP.NET是一種基于Web開發(fā)的技術,它支持的語言包括微軟所提供的所有語言,其中C#.NET最常用于開發(fā)基于Web的應用程序。ASP.NET MVC 框架提供用于創(chuàng)建Web應用程序的 ASP.NET Web窗體模式的替代模式;它是一個可測試性非常高的輕型演示框架,并集成了ASP.NET的功能;MVC框架在System.Web.Mvc程序集中定義。ASP.NET AJAX是JavaScript、CSS、DOM、XMLHttpRequest四種技術的集合體,并且AJAX 應用程序使用 XMLHttpRequest 對象繞過瀏覽器并與 Web 服務器及任何托管 HTTP 端點建立直接通信,通過JavaScript實現(xiàn)頁面實時異步處理數(shù)據(jù);在System.Web.Mvc.Ajax程序集中進行了定義。ADO.NET不是簡單地對ADO擴展,它提供了對關系數(shù)據(jù)、XML 和應用程序數(shù)據(jù)的訪問,對Microsoft SQL Server和XML等數(shù)據(jù)源以及通過OLE DB和XML公開的數(shù)據(jù)源提供一致的訪問;并通過ADO.NET DataSet對象處理和緩存數(shù)據(jù)。
1.ASP.NET MVC
可以認為ASP.NET MVC是ASP.NET和MVC框架的結合體,且互不包含。
(1)ASP.NET與MVC概述
ASP.NET是一種統(tǒng)一的Web開發(fā)模型,可用公共語言運行庫(CLR)兼容的任何語言來編寫應用程序的代碼,這些語言包括Microsoft Visual Basic、C#、JScript .NET 和 J#;主要提供了頁和控件框架、ASP.NET 編譯器、安全基礎結構、狀態(tài)管理功能、應用程序配置、運行狀況監(jiān)視和性能功能、調(diào)試支持、XML Web services 框架、可擴展的宿主環(huán)境、應用程序生命周期管理和可擴展的設計器環(huán)境等功能。其ASP.NET頁面周期如圖1所示。
MVC包括模型、視圖和控制三個組件,其中模型對象是實現(xiàn)應用程序數(shù)據(jù)域邏輯的應用程序部件,是檢索模型狀態(tài)并將其存儲在數(shù)據(jù)庫中;并且在小型應用程序中,模型通常是概念上的分離,而不是實際分離。視圖是顯示應用程序用戶界面(UI)的組件??刂破魇翘幚碛脩艚换?、使用模型并最終選擇要呈現(xiàn)的視圖來顯示 UI 的組件;在 MVC 應用程序中,視圖僅顯示信息;控制器則用于處理和響應用戶輸入和交互,并廣泛支持 ASP.NET 路由。ASP.NET MVC結構如圖2所示。
(2)ASP.NET MVC功能
主要包括以下功能,處理序列如圖3。
①應用程序任務(輸入邏輯、業(yè)務邏輯和 UI 邏輯)的分離、可測試性和測試驅(qū)動的開發(fā) (TDD)。MVC 框架中的所有核心協(xié)定都基于接口并且可使用 mock 對象進行測試,mock 對象是模仿應用程序中實際對象行為的模擬對象。
②可擴展和可插入的框架。在開發(fā)時,可以插入自己的視圖引擎、URL 路由策略、操作方法參數(shù)序列化以及其他組件;它還支持使用依賴項注入(DI)和控制反轉(IOC)容器模型。
③廣泛支持 ASP.NET 路由。ASP.NET 路由是一個功能強大的 URL 映射組件,它允許生成具有易于理解和可搜索的 URL 的應用程序。URL 未必包含文件擴展名,并且旨在支持非常適合搜索引擎優(yōu)化(SEO)和具象狀態(tài)傳輸(REST)尋址的 URL 命名模式。
④支持將現(xiàn)有 ASP.NET 頁面(.aspx文件)、用戶控件(.ascx文件)和母版頁(.master 文件)標記文件中的標記用作視圖模板,并支持現(xiàn)有 ASP.NET的功能。
(3)ASP.NET與ASP.NET MVC
具體比較如表1和圖4所示。
2.ASP.NET AJAX
ASP.NET AJAX 統(tǒng)一了編程接口和數(shù)據(jù)類型,并使用JavaScript Object Notation(JSON)層可確保到達客戶端的DTO制作從服務器發(fā)出的數(shù)據(jù)的鏡像。在客戶端使用ASP.NET AJAX與遠程服務進行交互,將實時數(shù)據(jù)返回到瀏覽器中,并提供了與服務器端服務同名的JavaScript 對象和大量靜態(tài)方法,如Update 方法最終會提取 JavaScript文檔類型定義(DTD)數(shù)組并將其傳遞到最終負責更新用戶界面的回調(diào)函數(shù)中;同時,標記生成器基于文檔對象模型(DOM)中一個或多個 HTML 模板的引用以及下載的數(shù)據(jù)返回 HTML 字符串,最后回調(diào)在頁面的 DOM 中插入該字符串;并通過DOM將DataView控件中的數(shù)據(jù)呈現(xiàn)在頁面。如圖5是ASP.NET AJAX緩存和運行機制。在定義客戶端主要以瀏覽器端模板模式(BST)運行,它的核心是JavaScript MarkupBuilder 類。
3.ADO.NET
ADO.NET 通過數(shù)據(jù)處理將數(shù)據(jù)訪問分解為多個可以單獨使用或一前一后使用的不連續(xù)組件。ADO.NET 包含用于連接到數(shù)據(jù)庫、執(zhí)行命令和檢索結果的.NET Framework 數(shù)據(jù)提供程序,如圖6所示。ADO.NET 類在System.Data.dllt中,如使用SQL Server的方法為using System.Data.SqlClient;并且與System.Xml.dll 中的 XML 類集成;具有斷開式數(shù)據(jù)結構,能夠與 XML 緊密集成,能夠組合來自多個不同數(shù)據(jù)源的數(shù)據(jù)的通用數(shù)據(jù)表示形式,以及與數(shù)據(jù)庫交互而優(yōu)化的功能。ADO.NET實體框架使開發(fā)人員可以編寫更少的數(shù)據(jù)訪問代碼,減少維護,將數(shù)據(jù)結構抽象化為更易于開展業(yè)務的方式,并且有利于數(shù)據(jù)的持久性;通過EntityClient可與概念層的實體數(shù)據(jù)模型(EDM)交互,如圖7所示。
三、基于ASP.NET MVC的教學質(zhì)量評價系統(tǒng)分析設計
教學質(zhì)量評價系統(tǒng)主要以教師-學生(主體-客體)間的“教學用”的角度來分析需求,因此操作群體包括教師和學生,評價基礎是教師與學生間的“教學用”的關系。在實現(xiàn)系統(tǒng)之前已經(jīng)建立了評價教師和學生的指標體系,這兩個指標體系是圍繞“教學用”展開的。其中教師指標主要從教學效果、教學方法、課堂氣氛、備課情況、課堂紀律、知識靈活程度、知識廣度、吸引力等角度建立的,學生的指標主要從自覺情況、學習積極性、聽課狀態(tài)、與教師互動頻率、學習成績、技能與比賽、自學能力、遵紀守法、到課率、參與活動的態(tài)度等角度建立的。這就形成了教師給學生打分,學生給教師打分,但這與現(xiàn)階段各學校采用的評課是有區(qū)別的,主要表現(xiàn)在:(1)教師與學生的指標是相互制約和聯(lián)系的;(2)注重主體與客體的關系;(3)強調(diào)“教學用”在評價中的作用,從而做到教-學-用鏈式關系;(4)將評價的結果及時反饋給領導,以便領導有效調(diào)整管理策略;(5)提高了領導、教師、學生的督導機制;(6)實現(xiàn)了“教學用”間的跟蹤機制。因此,基于ASP.NET MVC評價系統(tǒng)的實現(xiàn)就以兩大指標體系為系統(tǒng)主要需求展開分析設計,且采用層次分析法(AHP)計算每一個指標的權重,這樣降低了主觀因素,實現(xiàn)了科學評價,本系統(tǒng)是通過AHP計算軟件先將權重結果代入到系統(tǒng)中,再計算教學質(zhì)量結果。
1.教學質(zhì)量評價系統(tǒng)分析設計
用表現(xiàn)層、業(yè)務層和數(shù)據(jù)持久層作為系統(tǒng)的構建思想,并將AJAX和MVC融合到各層中;通過各指標的評分作為教學質(zhì)量評價的基礎,其計算方法為:
針對一個教師有i門課程,若每一門課程有mi個學生打分,每一門課程的權重分wi,分數(shù)為Si,則該教師每一門課程和總得分分別計算如下:
針對一個學生選修了j門課程,相應有Teaj個教師為他們打分,每一個教師打的分數(shù)為Sj,則該學生平均分Ava為:
教學質(zhì)量評價功能和流程分別如圖8、圖9所示。
2.關鍵代碼
(1)創(chuàng)建控制器:
sing System;
using System.Web;
using System.Web.Mvc;
namespace TeacherMVC.Controllers
{
public class TeacherController : Controller//創(chuàng)建一個教師類
{
[ControllerAction]
public void Index()
{
...
}
}
}
(2)創(chuàng)建視圖:
namespace TeacherFromMVC.Views.Record//創(chuàng)建一個教師視圖
{
public partial class HiThere : ViewPage
{
...
}
}
...
[ControllerAction]
public void EditPage(string pageName)//實現(xiàn)視圖翻頁
{
Space space = new Space(Repository);
Page page = space.GetPage(pageName);
RenderView("editpage",
new PageViewData {
Name = pageName,
Page = page });
}
(3)創(chuàng)建模型:
public class TeacherGradeRepository
{
//創(chuàng)建模型
TeachermarksModelDataContext db = new TeachermarksModelDataContext();
// 請求方法
public IQueryable FindAllTeachermarks() { ... }
public IQueryable FindAllPublicBookmarks() { ... }
public IQueryable FindTeachermarksByUser(string teacher){ ... }
public IQueryable FindPublicTeachermarksByUser(string teacher) { ... }
public IQueryable FindTeachermarksByTag(string tag) { ... }
public Teachermark FindTeachermarkById(int id) { ... }
public IQueryable FindTeacher(){ ... }
public IQueryable FindTags() { ... }
public Tag FindTag(string tag) { ... }
// insert/delete methods
public void AddTeachermark(Teachermark bm) { ... }
...
// persistence
public void Save() { ... }
}
(4)創(chuàng)建路由:
public class MvcApplication : System.Web.HttpApplication
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // 路由名
"{controller}/{action}/{id}",// URL參數(shù)
new { controller="Home", // 參數(shù)默認值
action="Index", id="" }
);
}
protected void Application_Start()
{
RegisterRoutes(RouteTable.Routes);
}
}
(5)聲明AJAX的方法:
{{description}}
…
function pageLoad()
{
if (builder === null)
{
builder = new Samples.MarkupBuilder();
builder.loadHeader($get("header"));
builder.loadFooter($get("footer"));
builder.loadItemTemplate($get("item"));
}
}
…
關鍵詞:MVC架構;IOC架構;ORM架構;技術實現(xiàn)
中圖分類號:TP301文獻標識碼:A文章編號:1672-7800(2012)003-0019-03
基金項目:東莞市高等院??蒲袡C構科技計劃項目(2011108101012)
作者簡介:李淑飛(1974-),女,湖南永興人,碩士,東莞職業(yè)技術學院講師,研究方向為計算機應用技術。
0引言
近年來,在J2EE世界,開源框架不斷涌現(xiàn),像Struts、Spring、Hibernate等經(jīng)典成熟的開源框架,在其框架上進行二次開發(fā)將極大地減少軟件開發(fā)成本,提高軟件的生產(chǎn)效率,同時也規(guī)范了部分軟件開發(fā)層次,大大減輕了開發(fā)人員的負擔。由于開源框架都是免費和開放源碼的,開發(fā)者如何有效地駕馭這些框架,如何將不同層上的框架整合在一起,把開發(fā)人員從繁雜的底層編碼中解脫出來,使其更專注于應用的業(yè)務,都是值得探討的問題。為此,筆者對開源框架核心思想的關鍵技術進行了研究,并給出了關鍵技術的實現(xiàn)方法。
1開源框架的核心思想
在J2EE開源框架中, Struts、Spring、Hibernate等開源框架代表了J2EE應用在結構上的3個層次,即應用系統(tǒng)前端、業(yè)務規(guī)則核心應用、數(shù)據(jù)訪問及存儲對象映射。Struts是在Web版應用程序時產(chǎn)生的,即在應用前端將視圖(View)、控制器(Controller)、數(shù)據(jù)模型(Model)分離開來,其核心思想是MVC架構。Spring是一個輕量級的開源框架,以控制反轉(IOC)原則和面向方面編程(AOP)思想為基礎,提供管理對象服務,其核心思想是控制反轉(IOC)或者說是依賴注入(DI),其核心概念是Bean Factory,它能夠很方便地配置、裝配JavaBean和普通的Java 對象,通過IOC 容器和依賴注入技術無縫的將各個協(xié)同工作的業(yè)務邏輯對象整合在一起。Hibernate是Java應用中對象與關系型數(shù)據(jù)庫的關系持久化層的解決方案,核心思想是ORM,負責Java對象和關系數(shù)據(jù)之間的映射,封裝了底層JDBC訪問數(shù)據(jù)庫細節(jié)。
2開源框架的關鍵技術及其應用模型
開源框架將Web應用程序劃分成三層架構:表現(xiàn)層、業(yè)務層和數(shù)據(jù)層,各層的關鍵技術如下:
(1)表現(xiàn)層關鍵技術。在MVC前端部分,需遵循MVC架構,構造出其數(shù)據(jù)模型(M)、視圖(V)、控制器(C)。模型(M)根據(jù)業(yè)務規(guī)則封裝數(shù)據(jù)后的應用程序狀態(tài),視圖(V)用來組織表現(xiàn)模型(M)內(nèi)容,在MVC的前端簡單模型中,視圖(V)通過外界輸入請求給控制器(C),控制器(C)根據(jù)視圖(V)的輸入內(nèi)容,將其轉換成程序相應行為,去更新模型(M),再選擇相應視圖(V)展現(xiàn)給用戶。
(2)業(yè)務層關鍵技術。該層關鍵技術是IOC業(yè)務關注點的IOC控制反轉、解耦及非侵入性,Spring 通過JavaBean 模型提供基于IoC 容器的BeanFactory 和基于AOP 框架的JavaBean 組件,不需要維護組件之間的依賴關系,只要在配置文件WebApplicationContext.xml 中設置屬性,Spring 容器將自動依賴注入到相關的組件,完成業(yè)務方法層組件的配置與加載。在圖1中的IOC簡單模型中,將業(yè)務關注點(組件)分離,可以達到將關注點解耦的目的,同時減少了業(yè)務關注點(組件)相互的侵入性和直接依賴。將關注點(組件)及關注點(組件)之間依賴關系的實現(xiàn)交給IOC容器完成(而不是交給應用程序內(nèi)部),IOC容器在運行期間將依賴關系動態(tài)的注入關注點(組件),即IOC控制反轉。
(3)數(shù)據(jù)持久層關鍵技術。該層關鍵技術是ORM部分,需解決數(shù)據(jù)庫的無關性和實體對象的持久性。圖2中的ORM中數(shù)據(jù)存取層實現(xiàn)了數(shù)據(jù)庫訪問無關性,通過封裝JDBC對數(shù)據(jù)庫的訪問細節(jié),實現(xiàn)了對主流數(shù)據(jù)庫的統(tǒng)一訪問接口,這些接口是建立在圖2中JDBC封裝數(shù)據(jù)庫訪問無關的基礎之上的。對象映射關系持久化是Java實體對象與關系數(shù)據(jù)庫的映射,通過持久化將數(shù)據(jù)庫中表的某條記錄映射成Java應用中的某個實體對象,或者將Java應用中的某個實體對象映射成數(shù)據(jù)庫中表的某條記錄,對象關系映射文件描述了映射關系,而持久化能讓開發(fā)者以面向?qū)ο蟮姆绞讲僮鲾?shù)據(jù)庫。DAO組件實現(xiàn)了對業(yè)務數(shù)據(jù)訪問方法,并通過統(tǒng)一對外訪問層向用戶提供統(tǒng)一的訪問方法和服務。
3開源框架關鍵技術的實現(xiàn)
在Web應用系統(tǒng)開發(fā)中,將MVC前端簡單模型(表現(xiàn)層)、IOC簡單模型(業(yè)務層)、ORM簡單模型(數(shù)據(jù)持久層)、關系數(shù)據(jù)庫整合起來,構成開源框架的架構層次模型。MVC框架中的控制器響應來自客戶端的數(shù)據(jù),并組裝相應數(shù)據(jù),然后請求或更新相應的業(yè)務模型,該業(yè)務模型繼而查找IOC框架中的業(yè)務組件,并請求IOC上的業(yè)務服務,業(yè)務服務調(diào)用ORM框架DAO類方法,從而使ORM與關系數(shù)據(jù)庫數(shù)據(jù)進行交互。完成對數(shù)據(jù)的訪問后,將響應結果集合返回給IOC框架的業(yè)務服務,業(yè)務服務響應給MVC的控制器,控制器再根據(jù)業(yè)務模型,選擇合適的視圖裝載數(shù)據(jù),最終響應給客戶端。
3.1MVC架構的關鍵技術實現(xiàn)
開源框架的MVC框架中的Controller控制器用來接收瀏覽器的請求,更新Model模型狀態(tài),以及選擇合適的View視圖,是組織協(xié)調(diào)框架統(tǒng)一行動的控制樞紐。Controller控制器是以servlet實現(xiàn)的命令設計模式,它是MVC的核心,mvcBean.xml文件(配置了模型及視圖的選擇)用來配置該命令模式,描述行為和流程。Controller控制器分為統(tǒng)一處理所有客戶端請求、統(tǒng)一處理所有跳轉和映射,統(tǒng)一處理所有客戶端請求由ControllerResult類實現(xiàn),統(tǒng)一處理所有跳轉由ControllerForword類實現(xiàn),而處理映射mvcBean.xml文件由InitConfig類實現(xiàn)。MVC框架實現(xiàn)流程見圖3。
3.2IOC架構的關鍵技術實現(xiàn)
開源框架的IOC框架中的核心就是業(yè)務組件及管理,業(yè)務組件及業(yè)務對象之間的依賴關系用配置文件iocBean.xml來管理,也就是依賴注入機制或者說是控制反轉(將關系交給IOC容器管理而不是應用程序)。IOC容器用來管理配置文件中業(yè)務對象間的依賴關系,并在Web容器啟動時或者應用程序需要時注入。IOC容器是在Web容器中開辟了一塊屬于某個業(yè)務應用的特別空間。在Web容器啟動時,通過啟動配置監(jiān)聽器來加載IOC容器,讓IOC容器根據(jù)配置文件加載或初始化業(yè)務組件并維護業(yè)務對象間的依賴關系,使用IocContext類來為這些加載的業(yè)務組件提供上下文環(huán)境,ClassInstanceFactory類來生成業(yè)務對象,讓util類包來解析業(yè)務對象間的依賴關系。這樣就能通過Web容器上下文WebApplicationContext環(huán)境就能訪問IOC容器上下文IocContext環(huán)境,進而訪問IOC容器下的能夠訪問所有內(nèi)容,包括業(yè)務組件及業(yè)務對象間的依賴關系。
開源框架中的簡單IOC框架部分核心思想的代碼實現(xiàn),包括IOC容器的初始化、依賴關系注入。在IOC容器的初始化代碼中,類WebContextListener實現(xiàn)了ServletContextListener接口,它會監(jiān)聽Servlet容器,當Servlet容器啟動時它會調(diào)用contextInitialized()方法進行相關的初始化工作,applicationContext作為IOC容器通知上下文被唯一一次初始化,包括初始化配置文件iocBean.xml,而后通過applicationContext能夠獲取到IOC容器所有上下文信息,當Servlet容器關閉的時候,它同樣會調(diào)用contextDestroyed()方法進行相關的銷毀工作,代碼如下:
public class WebContextListener implements ServletContextListener {
ApplicationContext applicationContext;
public void contextInitialized(ServletContextEvent servletContextEvent) {
String contextConfigPath = servletContextEvent.getServletContext().getInitParameter("contextBeanPath");
if (contextConfigPath == null) {
applicationContext = new IocContext();
} else {
applicationContext = new IocContext(contextConfigPath);
}
}
public void contextDestroyed(ServletContextEvent servletContextEvent) {
if (applicationContext != null)
applicationContext = null;
}
}
在IOC容器加載業(yè)務服務組件部分的核心代碼,實現(xiàn)對配置文件iocBean.xml的初始化,并完成業(yè)務組件的加載。bean用來描述一個業(yè)務組件,而該業(yè)務組件有很多屬性propertys;使用一個beanPropertyMap的Map類型來描述該業(yè)務組件的多個屬性,Map中的String類型的key來標識該業(yè)務組件的一個屬性,并用來區(qū)別于該業(yè)務組件其他的屬性,BeanProperty類型的value來存儲該屬性對象;BeanProperty類型的name用來描述該實例中使用的變量,ref描述該變量實現(xiàn)的類,其中name的值為IOC容器注入的業(yè)務名稱,而ref的值即為name的依賴關系,代碼如下:
List propertys = bean.selectNodes("property");
Map beanPropertyMap = new HashMap();
if (propertys != null && propertys.size() > 0) {
for (Element property : propertys) {
String name = property.attributeValue("name");
String ref = property.attributeValue("ref");
BeanProperty beanProperty = new BeanProperty();
beanProperty.setName(name);
beanProperty.setRef(ref);
beanPropertyMap.put(name, beanProperty);
}
}
3.3ORM架構的關鍵技術實現(xiàn)
開源框架的ORM框架中的核心就是對象關系映射,同時包括以封裝好的JDBC數(shù)據(jù)庫訪問無關性作為基礎的數(shù)據(jù)存取、事務管理。對象關系映射的主要文件有:映射類(*.java)、映射文件(*.xml)以及數(shù)據(jù)庫配置文件(*.xml)。映射類描述數(shù)據(jù)庫表的結構,表中的字段在類中被描述成屬性;映射文件描述數(shù)據(jù)庫表和映射類之間的關系,包括映射類和數(shù)據(jù)庫表的對應關系、表字段和類屬性類型的對應關系以及表字段和類屬性名稱的對應關系等;數(shù)據(jù)庫配置文件描述數(shù)據(jù)庫連接時需要的連接信息,比如連接數(shù)據(jù)庫類型信息、登錄用戶名、登錄密碼以及連接字符串。
在ORM框架的關鍵技術實現(xiàn)中,DAOFactory用來根據(jù)不同的業(yè)務對象產(chǎn)生相關業(yè)務DAO實現(xiàn)類,AbstractDAO用來封裝DAO實現(xiàn)中的增刪改查等共同抽象業(yè)務行為,是DAO實現(xiàn)的父類;IDAOModule接口采用Hibernate技術來管理數(shù)據(jù)存取層和實現(xiàn)實體對象持久化,并被依賴注入到AbstractDAO;DAO實現(xiàn)類則實現(xiàn)了業(yè)務數(shù)據(jù)訪問方法,這些方法會調(diào)用IDAOModule接口的實現(xiàn)類中的方法來對數(shù)據(jù)庫進行訪問,以獲取相關業(yè)務數(shù)據(jù)。當業(yè)務邏輯層調(diào)用ORM框架的數(shù)據(jù)訪問層時,根據(jù)業(yè)務邏輯DAOFactory選擇產(chǎn)生相應的DAO實現(xiàn)類,DAO實現(xiàn)類會選擇相應的IDAOModule接口實現(xiàn)對數(shù)據(jù)庫訪問并返回相關業(yè)務數(shù)據(jù)。
4結束語
開源MVC框架簡單化了Struts框架,不在視圖中支持擴展自定義標簽,IOC框架簡單將這些業(yè)務服務組件在web容器啟動IOC容器時或者在應用程序需要時初次初始化加載到一個全局Map(IocContext類能訪問到的)中,IOC容器只加載一次,簡單的提供業(yè)務服務組件的訪問;ORM框架并不維護模型映射中的對象間關系、關系數(shù)據(jù)庫關系、映射中的策略,只是簡單映射Java對象與關系數(shù)據(jù)模型,通過對表現(xiàn)層、業(yè)務層、數(shù)據(jù)層的整合、重構、改進,降低重新開發(fā)框架的成本,更能在極短的時間內(nèi)完成大量重復而簡單的工作任務,提升工作效率,打造企業(yè)競爭產(chǎn)品,提升企業(yè)品牌。
參考文獻:
\[1\]CHUCK CAVANESS.Programming jakarta struts O'Reilly Media,2002(11).
\[2\]劉君強,顧海全,王訊,等.基于開源框架的高質(zhì)量J2EE應用架構\[J\].計算機工程與設計,2007(1).
\[3\]黃道斌,尹榮章,葉明全,等.基于開源框架的內(nèi)容管理系統(tǒng)\[J\].電腦知識與技術,2010(4).
\[4\]夏昕,曹曉鋼,唐勇.深入淺出Hibernate\[M\].北京:電子工業(yè)出版社,2005.
\[5\]孫衛(wèi)琴.Tomcat與JavaWeb開發(fā)技術詳解\[M\].北京:電子工業(yè)出版社,2004.
\[6\]王福強.Spring揭秘\[M\].北京:人民郵電出版社,2009.
Research and Implementation of Key Technologies of
The Core Idea of Open Source Framework