mvc框架范文
時間:2023-03-31 09:23:08
導(dǎo)語:如何才能寫好一篇mvc框架,這就需要搜集整理更多的資料和文獻(xiàn),歡迎閱讀由公務(wù)員之家整理的十篇范文,供你借鑒。
篇1
【關(guān)鍵詞】.NET mvc框架 Web 設(shè)計
在基于.NET MVC框架的Web出現(xiàn)以前,Web中的主要技術(shù)是ASP、JSP等技術(shù),這些技術(shù)的應(yīng)用很容易將業(yè)務(wù)邏輯與頁面顯示混合起來,并不利于分工與協(xié)作。同時由于在業(yè)務(wù)邏輯層中含有SQL語句,如果出現(xiàn)數(shù)據(jù)庫變化等,將直接影響到系統(tǒng)修改,其不利于系統(tǒng)維護(hù)。因此,基于.NET MVC框架的Web設(shè)計成為計算機(jī)領(lǐng)域研究重點。
1 MVC優(yōu)點
MVC的優(yōu)點主要體現(xiàn)在以下幾點:
1.1 共享性
它主要是利用模型完成數(shù)據(jù)返回的,且可以利用視圖實現(xiàn)數(shù)據(jù)傳達(dá),并實現(xiàn)格式化,然后再將這些信息傳遞到用戶手中,在數(shù)據(jù)分離形式的作用下,也可以有效提升系統(tǒng)代碼的移植性與重用性。
1.2 控制性
這一點主要表現(xiàn)在控制器對業(yè)務(wù)的控制上,它能夠結(jié)合用戶實際情況完成控制,然后從模型層中獲得必要的信息,再將這些信息傳遞到視圖層中,并讓這些數(shù)據(jù)顯現(xiàn)出來,這樣也可以有效提升應(yīng)用程序的可配置性與靈活性。
2 MVC設(shè)計思想
MVC主要由三部分構(gòu)成,分別為模型層、視圖層以及控制器層。為做好NVC設(shè)計,就需要充分了解這三個層次:
2.1 視圖層
它所代表的是同網(wǎng)頁用戶的應(yīng)用界面,也就是Web中的HTML頁面。一般來講,視圖層主要是將系統(tǒng)中的數(shù)據(jù)呈現(xiàn)出來,且為用戶提供有利于交互的界面,這樣一來也就減少了地其他業(yè)務(wù)的處理。在實際利用的過程中,視圖通常需要提交數(shù)據(jù)用戶以后再接受其他數(shù)據(jù),然后再將這些數(shù)據(jù)以用戶需求的方式體現(xiàn)出來,同時,用戶也會利用視圖層將自己的請求傳送到模型中。
2.2 模型層
它是MVC框架中最重要的組成部分,是實現(xiàn)系統(tǒng)邏輯處理的重要組成部分。在模型接收來自視圖層的請求以后,就會自動處理,然后再將處理結(jié)果在控制器的作用下回饋給視圖層。在這一過程中,控制器與視圖層均是通過操作的方式進(jìn)行工作的。
2.3 控制層
對于控制器來說,其功能是將用戶發(fā)出的請求反映給模型,然后再將模型所給出的結(jié)果反映給用戶,可以說控制層是視圖層與模型之間的中轉(zhuǎn)環(huán)節(jié),是反饋用戶請求的重要力量,但它并不參與數(shù)據(jù)處理工作。
3 基于.NET MVC框架的Web設(shè)計
對于常規(guī)Web應(yīng)用系統(tǒng)來說,主要分為表示層、業(yè)務(wù)層以及數(shù)據(jù)庫層幾個部分,在表示層中,只有視圖與控制器兩部分;在業(yè)務(wù)層中有業(yè)務(wù)邏輯層、實體層、數(shù)據(jù)訪問及其接口層;在數(shù)據(jù)層中僅有數(shù)據(jù)庫。要做好基于.NET MVC框架的Web設(shè)計,應(yīng)從以下幾方面入手:
3.1 表示層
對于.NET MVC框架來說,在的作用下能夠獲得良好且有利于MVC設(shè)計實現(xiàn)的環(huán)境。開發(fā)人員只要利用.aspx頁面中的開發(fā)用戶接口就可以將視圖展示出來,同時也可以將控制器中的功能體現(xiàn)出來。模型主要對應(yīng)的則是業(yè)務(wù)應(yīng)用部分。為做好基于.NET MVC框架的Web設(shè)計,可以在頁面控制器的作用下優(yōu)化MVC,然后在應(yīng)用程序各個頁面的公用方法中編入基類,這樣一來,所有頁面中都存在基類,它們不僅可以將自己原有的內(nèi)容體現(xiàn)出來,還具有其他作用。
3.2 業(yè)務(wù)層
對于業(yè)務(wù)層來說,它是MVC設(shè)計中十分重要的一部分,也是基于.NET MVC框架的Web設(shè)計基礎(chǔ),在這一部分的設(shè)計中應(yīng)從以下幾方面入手:
(1)保證業(yè)務(wù)邏輯與數(shù)據(jù)實體相分離,兩者屬于不同的組成部分,對于業(yè)務(wù)邏輯類來說,主要是利用實體對象完成業(yè)務(wù)規(guī)則與邏輯實現(xiàn)的,而實體層則有自己的實體對象,一般來講只有屬性,不存在方法,所以主要用于數(shù)據(jù)實體展現(xiàn)。
(2)分x數(shù)據(jù)訪問與業(yè)務(wù)。在這一部分中主要涵蓋了數(shù)據(jù)訪問層及其接口層,它的主要作用是讓業(yè)務(wù)邏輯層可以全面的描述業(yè)務(wù)規(guī)則,這樣一來就可以用數(shù)據(jù)訪問層完成實體對象與數(shù)據(jù)庫交互。為做好基于.NET MVC框架的Web設(shè)計,應(yīng)將數(shù)據(jù)訪問接口層加入到訪問層與業(yè)務(wù)邏輯層之間,這樣不僅可以起到工廠模式的作用還能讓數(shù)據(jù)訪問方法構(gòu)成抽象接口,這樣就可以將業(yè)務(wù)邏輯層與數(shù)據(jù)訪問層分離開來,同時也便于配置文件的修改。
(3)為做好基于.NET MVC框架的Web設(shè)計,還要在訪問層中應(yīng)用NHibernate工具,它是以.NET為基礎(chǔ)建立起來的關(guān)系型數(shù)據(jù)庫,屬于對象持久化類庫的一種。在NHibernate中不必編寫SQL語句,它可以將相關(guān)的映射信息保留下來,并存儲到原數(shù)據(jù)中,這樣就可以讓代碼與對象之間存在一定的關(guān)聯(lián)性,并自動生成SQL語句,這樣也可以讓對象存儲到表與字段中。
3.3 模型層
由于模型是應(yīng)用程序的中心,其中涵蓋了很多與應(yīng)用程序相關(guān)的內(nèi)容,所以,在實際設(shè)計中,應(yīng)進(jìn)一步強(qiáng)化應(yīng)用程序的持久化。對于基于.NET MVC框架的Web設(shè)計來說,可以將LINQ-TO-SQL應(yīng)用其中,原因在于這種設(shè)計方式不僅有利于,還可以將.NET平臺與LINQ機(jī)制結(jié)合在一起,這也是有效提升數(shù)據(jù)庫處理能力的有效方式。在設(shè)計中,可以先為應(yīng)用程序創(chuàng)建DAL,但不需要編寫代碼,然后再做進(jìn)一步細(xì)分,并用LINQ完成語句查詢,且從數(shù)據(jù)庫中找出所需的實體對象。在設(shè)計完成以后,LINQ-TO-SQL就可以將不必要的細(xì)節(jié)忽略,這樣既能有效提升數(shù)據(jù)庫操作的便利性,也能進(jìn)一步強(qiáng)化業(yè)務(wù)邏輯開發(fā),更可以加快數(shù)據(jù)應(yīng)用程序開發(fā)速度。
3.4 控制層
由于控制層主要用于用戶請求與輸入處理,然后再將結(jié)果反饋給客戶端,同時完成數(shù)據(jù)集合與處理,并為其呈現(xiàn)合適的視圖,這樣就可以將隱藏其中的視圖代碼消除。為做好設(shè)計首先應(yīng)創(chuàng)建合適的模型,并全面檢查數(shù)據(jù)訪問與執(zhí)行狀態(tài),且提供一定的面向?qū)ο髷?shù)據(jù),這樣就可以讓數(shù)據(jù)與方法結(jié)合在一起,且構(gòu)成一定的視圖。在.NET MVC框架完成以后,也可以更好的完成各個元素之間的協(xié)調(diào)與組織,這也是有效強(qiáng)化程序元素交互的有效方式。為進(jìn)一步做好應(yīng)用程序測試,還要做好類顯示輸出,以便為用戶輸入奠定基礎(chǔ),盡管編寫程序相對復(fù)雜,但且會因.NET MVC框架的不同,將業(yè)務(wù)邏輯分離開,這樣也可以有效提升單元測試效率。
3.5 視圖層
在基于.NET MVC框架的Web設(shè)計中,視圖層主要用于模型展示,在視圖層的作用下可以將瀏覽器中的HTML頁面展示出來,所以,在實際時可以利用微軟控件實現(xiàn)控制,這樣也可以讓HTML更加潔與高效。然后通過.NET MVC提供的相關(guān)說明了解各個控件的作用,這樣就可以順利完成視圖層設(shè)計與開發(fā),相關(guān)開發(fā)也可以有效提升工作效率。在視圖層設(shè)計完成以后,還可以順利完成視圖檢查等,尤其是在編譯階段,可以隨時發(fā)現(xiàn)隱藏在其中的錯誤與缺陷,視圖模板也將變得更加清晰。
3.6 框架特點
之所以要重視基于.NET MVC框架的Web設(shè)計,主要是由于在基于.NET MVC框架的Web設(shè)計中,Web中的三層框架帶有一定的細(xì)分性,不僅可以讓結(jié)構(gòu)更加清晰,還能進(jìn)一步完備相關(guān)功能,進(jìn)而讓系統(tǒng)變得更具有條理性與便捷性。其次,做好.NET MVC框架設(shè)計,可以讓顯示層與應(yīng)用層相互分離,也可以進(jìn)一步做好頁面修改,這也是實現(xiàn)單元測試,強(qiáng)化系統(tǒng)靈活性的有效方式。再者,在基于.NET MVC框架的Web設(shè)計實現(xiàn)以后,還可以最大程度的減少依懶性,由于前端頁面過于復(fù)雜,需要共享的代碼也很多,這就需要利用MVC模式完成分離等,這也是有效強(qiáng)化管理,做好修改的有效措施。最后,在基于.NET MVC框架的Web設(shè)計中,不僅可以讓數(shù)據(jù)訪問與業(yè)務(wù)邏輯區(qū)分開來,還可以強(qiáng)化系統(tǒng)的可移植性與持久性,尤其是在工廠模式的作用下,也可以進(jìn)一步突出依賴倒置原則,且最大程度的減少數(shù)據(jù)訪問層給系統(tǒng)帶來的變化。
4 結(jié)束語
之所以要做好Web設(shè)計,主要是為了更好彌補(bǔ)原有設(shè)計中的不足,為實現(xiàn)這一目標(biāo),基于.NET MVC框架的Web設(shè)計成為重點,在這樣的Web設(shè)計完成以后,不僅有效提升了系統(tǒng)靈活性,還進(jìn)一步提升了可維護(hù)性,同時也有效降低了代碼編寫量與復(fù)雜性,促進(jìn)了開發(fā)效率早日完成,因此,應(yīng)重視基于.NET MVC框架的Web設(shè)計。
參考文獻(xiàn)
[1]周文紅.基于 MVC框架的Web應(yīng)用開發(fā)[J].計算機(jī)與現(xiàn)代化,2013(10):197-199.
[2]黃勝根,陳蜀宇.基于 MVC框架的干教系統(tǒng)的設(shè)計與實現(xiàn)[J].計算機(jī)技術(shù)與發(fā)展,2010(02):190-193.
[3]劉亞鵬,張征,俞婷.基于MVC多層架構(gòu)的Web應(yīng)用框架設(shè)計[J].微計算機(jī)信息,2011(07):169-171.
[4]許輝.基于 MVC框架的Web設(shè)計[J].計算機(jī)光盤軟件與應(yīng)用,2014(16):266-267.
[5]黃東連.基于 MVC框架的Web開發(fā)研究[J].河南科技,2015(13):26-27.
[6]肖洋.基于的MVC框架的應(yīng)用開發(fā)模式研究[J].電子技術(shù)與軟件工程,2016(02):63.
[7]滿高媛.MVC設(shè)計模式在框架中的應(yīng)用研究[J].軟件導(dǎo)刊,2016(04):149-151.
篇2
關(guān)鍵詞:PHP;MVC;網(wǎng)頁設(shè)計
PHP是目前比較流行的網(wǎng)頁程序設(shè)計腳本語言。MVC(Model View Controller)是模型、視圖、控制器的縮寫,是一種程序設(shè)計規(guī)范,主要目的是分離模型和視圖,通過控制器管理所有的查詢和顯示過程,而且MVC框架編寫的程序更易于擴(kuò)展,方便日后的功能擴(kuò)展和維護(hù)工作。
1 數(shù)據(jù)模型設(shè)計
MVC基本框架需要3個文件,分別是test_model.php、test_controller.php、test_view.php,分別對應(yīng)模型、控制器、視圖。
首先編寫test_model.php,創(chuàng)建test_model類,包含數(shù)據(jù)庫連接和查詢過程,本實例因篇幅原因簡單用變量代替復(fù)雜的數(shù)據(jù)查詢。內(nèi)容如下:
//建立數(shù)據(jù)模型
class test_model{
protected $text1;
protected $text2;
public function __construct(){
$this->my_mvc();}
/*構(gòu)建賦值過程,如果需要數(shù)據(jù)庫,那么可以在此連接數(shù)據(jù)庫*/
public function my_mvc(){
$this->text1 = "PHP";
$this->text2 = "MVC";}
//在此生成需要顯示在視圖中的一些數(shù)據(jù)內(nèi)容
public function view_data(){
$view_text = "基于" . $this->text1;
$view_text.= "的" . $this->text2 . "框架";
return $view_text;}
}?>
2 控制器設(shè)計
其次編寫的是控制器test_controller.php部分,控制器部分包含通過實例化test_model并用其中的view_data方法得到的數(shù)據(jù),并發(fā)送到視圖中。
//建立控制器
class test_controller{
function __construct(){
//加載數(shù)據(jù)模型
require_once "test_model.php";
$this->view_data();}
//顯示控制部分,通過數(shù)據(jù)模型獲取數(shù)據(jù)并顯示到視圖中
public function view_data(){
$data_model = new test_model();
/*通過數(shù)據(jù)模型類的view_data方法制作出來的數(shù)據(jù)放到變量中*/
$view_data = $data_model->view_data();
//通過加載視圖文件,將數(shù)據(jù)顯示到視圖中
require_once "test_view.php";}
}?>
3 視圖和首頁設(shè)計
視圖是顯示數(shù)據(jù)的部分,只需要使用html編寫規(guī)范設(shè)計網(wǎng)頁就可以了。而首頁index.php里加載并調(diào)用控制器就可以了。
test_view.php部分:
var _userid = '';var _siteid =2230;var _istoken = 1;var _model = 'Model03'; WebPageSpeed =453; UrchinTrack();
index.php部分:
//加載控制器
require_once “test_controller.php";
//實例化控制器類
$test = new test_controller();
?>
至此,所有的代碼部分全部編寫完成,并通過了測試。本文中使用了變量形式的數(shù)據(jù),如果需要連接到數(shù)據(jù)庫,那么須在數(shù)據(jù)模型文件中添加連接數(shù)據(jù)庫的代碼,如果建立更多的功能,可以先建立父類,再去建立具體功能子類繼承父類,這樣就可以更好的減少代碼冗余,提高編寫和維護(hù)效率。
參考文獻(xiàn):
[1]斯克拉(美).PHP經(jīng)典實例[M].中國電力出版社,2009.
篇3
關(guān)鍵詞:Struts,MVC,OA
為了提高應(yīng)用系統(tǒng)中組件的重用能力和事務(wù)控制的靈活性,越來越多的開發(fā)人員采用MVC設(shè)計模式來分離系統(tǒng)的用戶界面、業(yè)務(wù)邏輯及業(yè)務(wù)控制[1~3]。Struts框架結(jié)構(gòu)是MVC設(shè)計模式的一種具體實現(xiàn),它為Web應(yīng)用提供了一個通用的框架,使得開發(fā)人員可以把精力集中在如何解決實際業(yè)務(wù)問題上。此外,Struts框架提供了許多可供擴(kuò)展和定制的技術(shù),使得應(yīng)用程序可以方便地擴(kuò)展框架,更好地適應(yīng)用戶的實際需求。本文首先介紹了MVC模式的基本思想及Struts的工作原理,并以網(wǎng)上辦公系統(tǒng)為例,詳細(xì)地說明了基于Struts框架進(jìn)行信息管理系統(tǒng)開發(fā)的方法與思路。
1 Struts框架
Struts是Apache軟件基金的一個開源項目,是基于MVC設(shè)計模式構(gòu)建Java Web應(yīng)用程序的框架[4]。Struts框架在構(gòu)建復(fù)雜的Web應(yīng)用時,允許把應(yīng)用程序的業(yè)務(wù)邏輯、控制邏輯和表現(xiàn)邏輯進(jìn)行分離MVC,從而提高系統(tǒng)靈活性、重用性和可維護(hù)性,進(jìn)而簡化Web應(yīng)用程序的開發(fā)。
1.1 MVC模式
MVC是80年代Smalltalk中使用的一種軟件模式,目前已經(jīng)被廣泛使用,是J2EE平臺上推薦使用的設(shè)計模式[5]。該模式將應(yīng)用系統(tǒng)的輸入、處理和輸出按照Model、View和Controller的方式進(jìn)行徹底的分離,因此應(yīng)用系統(tǒng)就被分為了三個核心部分:模型、視圖和控制器,它們各自處理各自的事務(wù)。
(1)模型(Model):它代表的是應(yīng)用的業(yè)務(wù)邏輯,可以對業(yè)務(wù)流程、狀態(tài)處理和業(yè)務(wù)規(guī)則的進(jìn)行制定。業(yè)務(wù)流程的處理過程對其它部分來說是黑箱操作,模型接受視圖請求的數(shù)據(jù),并返回最終的處理結(jié)果。業(yè)務(wù)模型的設(shè)計可以說是MVC最主要的核心。
(2)視圖(View):它代表的是應(yīng)用的表示,是與用戶交互的部分。它一般進(jìn)行數(shù)據(jù)的采集,并把數(shù)據(jù)交給其它部分處理。
(3)控制器(Controller): 它位于模型與視圖之間,控制著它們之間的交互處理過程。控制器把客戶端來的請求轉(zhuǎn)換成模型能夠理解和執(zhí)行的請求,并且根據(jù)請求選擇處理的模型,接著根據(jù)執(zhí)行結(jié)果決定下一次顯示的視圖。
圖1描述了模型、視圖和控制器三者之間的關(guān)系。在應(yīng)用系統(tǒng)開發(fā)過程中,通過該設(shè)計模式可以將業(yè)務(wù)邏輯、控制邏輯和表現(xiàn)邏輯分別用用不同的組件實現(xiàn),以提高代碼的重用性和可維護(hù)性。
圖1 MVC模式圖
1.2 Struts工作原理
Struts是一個開放資源框架,是MVC設(shè)計模式的一個實現(xiàn),由一組相互協(xié)作的類、Servlet以及JSP標(biāo)簽庫組成。Struts 的體系結(jié)構(gòu)將Model、View、Controller 分別映射到 Web 應(yīng)用中的組件。在Struts中Model由Action和ActionForm對象來實現(xiàn),所有的Action處理器對象都是Action類的子類,Action處理器對象封裝了具體的處理邏輯MVC,調(diào)用業(yè)務(wù)邏輯模塊,并且把響應(yīng)提交到相關(guān)的View組件以產(chǎn)生響應(yīng)。通過ActionForm組件對象實現(xiàn)了對View和Model基本的控制器組件是ActionServlet,但是對于業(yè)務(wù)邏輯的操作則主要由Action、ActionMapping和ActionForward這幾個組件協(xié)調(diào)完成。其中Action扮演了真正的業(yè)務(wù)邏輯的實現(xiàn)者,或者說是業(yè)務(wù)邏輯調(diào)用的接口;而ActionMapping和ActionForward則制定了不同業(yè)務(wù)邏輯或流程的運行方向[ 6],其工作原理如圖2所示。
圖2 Struts 的工作原理
2 網(wǎng)上辦公系統(tǒng)的實現(xiàn)
2.1 系統(tǒng)介紹
網(wǎng)上辦公系統(tǒng)是為幫助企事業(yè)單位內(nèi)部員工更好地進(jìn)行合作或更有效地工作而設(shè)計的,旨在實現(xiàn)企事業(yè)單位內(nèi)部的無紙化辦公。由于不同單位所需辦公系統(tǒng)功能的不同,在此我們選取了網(wǎng)上辦公系統(tǒng)中通用的幾個模塊進(jìn)行了實現(xiàn),主要包括:文件夾、待辦事項、通訊錄、日程安排、文件柜、電子公告、用戶設(shè)置和系統(tǒng)管理等模塊。
2.2 系統(tǒng)實現(xiàn)
由于系統(tǒng)各功能的實現(xiàn)無論是在步驟上,還是在方法上都是大同小異,所以在此以用戶登錄為例詳細(xì)說明該系統(tǒng)的實現(xiàn)方法及思路。在登錄窗口當(dāng)用戶輸入用戶名和密碼,點擊“登錄”按鈕,即向 Controller 發(fā)出一個 HTTP 請求。用戶輸入的表單參數(shù)將以LoginForm的形式封裝提交到 ActionForward。這個ActionForward調(diào)用相應(yīng)的 login 執(zhí)行業(yè)務(wù)邏輯,完成用戶登錄功能。以下是登錄功能的具體實現(xiàn)過程:
首先,編寫登錄相關(guān)的業(yè)務(wù)邏輯代碼,其具體代碼如下所示:
public int login(String uid,String pwd)throws OAServiceException{
Session session=null;
Transaction tx=null;
Query query1=null;
Query query2=null;
int result=1;
try {
session=HibernateUtil.getSession();
tx=session.beginTransaction();
query1=session.createQuery('from User u where u.uid=:vUid');
query1.setParameter('vUid',uid);
if(query1.uniqueResult()==null) return 1;
query2=session.createQuery('from User u where u.uid=:vUid andu.password=:vPwd');
query2.setParameter('vUid',uid);
query2.setParameter('vPwd',pwd);
User u=(User) query2.uniqueResult();
tx.commit();
return((u==null)?2:3);
} catch (Exception e) {
rollBack(tx);
}finally{
closeSession(session);}
return result;}
然后,編寫登錄要用到的ActionForm類:
package com.lanyu.oa.form;
……
public class LoginForm extends ActionForm {
private String uid;
private String password;
……
public ActionErrors validate(ActionMapping mapping,HttpServletRequest request) {
ActionErrors errors=new ActionErrors();
if(uid.length()<1)
errors.add(ActionErrors.GLOBAL_ERROR,newActionError('errors.uid.required'));
if(password.length()<1)
errors.add(ActionErrors.GLOBAL_ERROR,newActionError('errors.password.required'));
return errors;}
}
接著,編寫登錄相關(guān)的Action類以及相應(yīng)的方法,登錄相關(guān)的Action類為com.lanyu.oa.action.UserAction.java,以下是完成登錄功能的代碼片斷:
public ActionForward login(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request,HttpServletResponse response) {
ActionForward forward=null;
String msg=null;
Useru=null;
intresult=0;
LoginForm form=(LoginForm) actionForm;
String uid=form.getUid();
String pwd=form.getPassword();
try {
result=service.login(uid,pwd);
u=service.getUser(uid);
} catch (OAServiceException e) {}
if(u==null)result=2;
forward=processResult(result,msg);
return forward;
}
最后,在配置文件中添加與登錄相關(guān)的配置。具體步驟如下:
(1) 在Struts的配置文件中找到<form-beans>標(biāo)簽MVC,在此標(biāo)簽下添加子標(biāo)簽<form-bean>。其具體內(nèi)容如下:
<form-beans>
……
<form-bean name='LoginForm' type='com.lanyu.oa.form.LoginForm'/>
……
</form-beans>
(2) 在Struts的配置文件中找到<ActionMappings>標(biāo)簽,在此標(biāo)簽下添加<action>子元素以及相關(guān)的局部<forward>標(biāo)簽。其具體內(nèi)容如下:
<actionpath='/User/login' parameter='method' type='com.lanyu.oa.action.UserAction'
name='LoginForm'input='/login.jsp' scope='request'>
<forward name='success' path='main.page' redirect='true'/>
</action>
(3)由于本系統(tǒng)中使用了tiles,因此還得在tiles-defs.xml文件中添加相應(yīng)的配置。
登錄模塊的運行界面如圖3所示,如果登錄成功,則進(jìn)入系統(tǒng),系統(tǒng)登錄成功的主界面如圖4所示。
圖3 用戶登錄界
圖4 系統(tǒng)主界面
3 結(jié)束語
Struts作為一種有效的進(jìn)行Web應(yīng)用開發(fā)的框架,充分利用了MVC模式的優(yōu)點。應(yīng)用Struts框架構(gòu)建網(wǎng)上辦公系統(tǒng)很好地實現(xiàn)了業(yè)務(wù)邏輯與表示邏輯的分離,大大簡化系統(tǒng)開發(fā)的難度。尤其是各層邏輯組件的同時開發(fā),縮短了開發(fā)周期,其靈活的、大量豐富的標(biāo)記庫語言大大提高了開發(fā)效率,而且應(yīng)用Struts框架構(gòu)建的Web應(yīng)用系統(tǒng),具有良好的可重用性、可維護(hù)性和可擴(kuò)展性。
參考文獻(xiàn)
[1]石海鵬.基于MVC模式的J2EE應(yīng)用研究與開發(fā):[碩士學(xué)位論文]. 江西:江西師范大學(xué), 2004.
[2]馬黎明.基于J2EE平臺的Web應(yīng)用系統(tǒng)研究:[ 碩士學(xué)位論文]. 武漢:武漢理工大學(xué), 2004.
[3]孫衛(wèi)琴.精通Hibernate:Java對象持久化技術(shù)詳解[M]. 北京:電子工業(yè)出版社, 2005.9
[4]Erich Gamma. J2EE構(gòu)建企業(yè)系統(tǒng)[M]. 北京:清華大學(xué)出版社, 2001
[5]James Holmes著, 孫燕等譯. Struts程序員查詢辭典[M]. 北京:中國鐵道出版社, 2005
[6](美)Ted Husted. 實戰(zhàn)Struts[M].北京:機(jī)械工業(yè)出版社,2005.5
篇4
隨著互聯(lián)網(wǎng)寬帶技術(shù)應(yīng)用的成熟,以及物流和支付系統(tǒng)的完善,電子商務(wù)成為互聯(lián)網(wǎng)普及應(yīng)用的主流,影響著千家萬戶的生活和經(jīng)濟(jì)行為,并日益成為社會商業(yè)活動的重要形式。因此,各行業(yè)均希望可以快速展開網(wǎng)上營銷渠道。新形式下,電商網(wǎng)站開發(fā)人員如何縮短開發(fā)周期,進(jìn)一步提高工作效率,是每一個程序員所面臨的問題。各大WEB框架的出現(xiàn),使得電商網(wǎng)站服務(wù)器端邏輯的設(shè)計非常便利,利用它進(jìn)行網(wǎng)站的開發(fā),可以節(jié)省很多的時間和精力。本文基于Spring MVC來構(gòu)建一個電子商務(wù)網(wǎng)站,希望可以對讀者學(xué)習(xí)和使用Spring MVC建站產(chǎn)生一些幫助。
2 網(wǎng)上電商平臺Estore(Online electric business
platform estore)
2.1 Estore簡介
Estore是采用Java技術(shù)設(shè)計開發(fā)的網(wǎng)上電子商務(wù)平臺,采用了Spring MVC3、Hibernate3和Freemarker相結(jié)合的技術(shù)架構(gòu)。繼承了Java高效、跨平臺、穩(wěn)定且安全等多方面的優(yōu)點[1],能夠支持Oracle、Sqlserver、Mysql等數(shù)據(jù)庫,統(tǒng)一在后臺管理網(wǎng)站的模板,用戶可利用標(biāo)簽自定義顯示內(nèi)容和方式。
2.2 Estore的運行環(huán)境
Estore原則上支持全系列JAVA運行環(huán)境、數(shù)據(jù)庫,主要使用以下環(huán)境:
(1)WEB服務(wù)器:Weblogic、Tomcat、WebSphere、JBoss等。
(2)數(shù)據(jù)庫服務(wù)器:Oracle、Mysql、SqlServer、DB2等。
(3)操作系統(tǒng):Windows、Linux、Unix等。
3 基于Spring MVC的電商平臺的設(shè)計與開發(fā)
(The design and development of electric business
platform based on the spring MVC )
3.1 Spring MVC簡介
3.1.1 Spring MVC架構(gòu)
Spring MVC的整體架構(gòu)如圖1所示[2],視圖層采用Html或Jsp實現(xiàn);控制層采用Servlet實現(xiàn),整個框架采用同一個Servlet,以實現(xiàn)請求的中轉(zhuǎn);模型層采用Java實現(xiàn),主要決定用來做什么;在模型層后面添加了一個DAO,目的是將決定做什么和具體怎么做分開。
圖1 Spring MVC的架構(gòu)
Fig.1 The architecture of spring MVC
整個Web框架大致的流程是:首先客戶端發(fā)送請求,提交Html或Jsp頁面給中轉(zhuǎn)器(Servlet);中轉(zhuǎn)器按照客戶的請求,選擇相應(yīng)的模型層,即Logic進(jìn)行相應(yīng)的邏輯處理;如果需要使用數(shù)據(jù)庫,則通過DAO進(jìn)行相應(yīng)的數(shù)據(jù)庫操作。
3.1.2 Spring MVC重要組件
圖2 Spring MVC的組件
Fig.2 The component of spring MVC
Spring MVC的組件如圖2所示[3]。
(1)Spring MVC將所有的請求都提交給DispatcherServlet,它會委托應(yīng)用系統(tǒng)的其他模塊負(fù)責(zé)對請求進(jìn)行真正的處理工作。
(2)DispatcherServlet查詢一個或多個HandlerMapping,找到處理請求的Controller。
(3)DispatcherServlet把請求提交到目標(biāo)Controller。
(4)Controller進(jìn)行業(yè)務(wù)邏輯處理后,會返回一個ModelAndView。
(5)Dispathcher查詢一個或多個ViewResolver視圖解析器,找到ModelAndView對象指定的視圖對象。
(6)視圖對象負(fù)責(zé)渲染并返回給客戶端。
3.2 Hibernate框架
3.2.1 Hibernate簡介
Hibernate是一個開源免費的Java包,它使得程序與數(shù)據(jù)庫的交互變得十分容易,更加符合面向?qū)ο蟮脑O(shè)計思想[4]。Hibernate使開發(fā)者可以專注于應(yīng)用程序的對象和功能,而不用關(guān)心如何保存它們或查找這些對象。
在對SQL語句完全不了解的情況下,使用Hibernate仍然可以開發(fā)出優(yōu)秀的包含數(shù)據(jù)庫訪問的應(yīng)用程序。
3.2.2 Hibernate運行過程
圖3 Hibernate運行過程
Fig.3 The running process of hibernate
Hibernate的運行過程如圖3所示。
應(yīng)用程序先調(diào)用Configuration類,該類讀取Hibernate配置文件及映射文件中的信息,并用這些信息生成一個SessionFactory對象,然后從SessionFactory對象生成一個Session對象,并用Session對象生成Transaction對象??赏ㄟ^Session對象的get()、load()、save()、update()、delete()和saveOrUpdate()等方法對PO(persistent object持久對象)進(jìn)行加載、保存、更新、刪除等操作。
在查詢的情況下,可通過Session對象生成一個Query對象,然后利用Query對象執(zhí)行查詢操作:如果沒有異常,Transaction對象將提交這些操作到數(shù)據(jù)庫中;如果有異常,則執(zhí)行回滾操作。
3.3 Freemarker簡介
FreeMarker是一個模板引擎[5],它由Java語言編寫而成,基于模板來生成文本輸出。FreeMarker與Web容器沒有關(guān)系,即Web運行時,并不知道HTTP或Servlet。它不僅能夠用于表現(xiàn)層的實現(xiàn),而且還可以用于生成Xml、Jsp或Java等。FreeMarker允許Java servlet保持圖形設(shè)計與應(yīng)用程序邏輯的分離,這是通過在模板中封裝Html完成的。模板用Servlet提供的數(shù)據(jù)動態(tài)地生成Html。模板語言是直觀且強(qiáng)大的,編譯器的速度快,輸出接近靜態(tài)HTML頁面的速度。
雖然FreeMarker具有一些編程的能力,但通常由Java程序負(fù)責(zé)要顯示的數(shù)據(jù),由FreeMarker生成頁面,通過模板來顯示數(shù)據(jù)。
下面是用Freemarker來做的一個顯示頁面:
[@post_list]
[#list tag_list as post]
[#list post.types as tlist]
[#if tlist.name == "首頁"]
[/#if]
[/#list]
[/#list]
[/@post_list]
3.4 按Spring MVC框架分層設(shè)計電商平臺
3.4.1 Dao層
Dao層分析模塊所要涉及的表,確定表之間的關(guān)系,編寫Hibernate Mapping文件和持久化類,它使用Hibernate連接數(shù)據(jù)庫、操作數(shù)據(jù)庫(增刪改查)。根據(jù)模塊需要的各種持久化操作,確定對應(yīng)的方法,據(jù)此來編寫Dao接口和實現(xiàn)類。
3.4.2 Entity層
Entity層是實體類層,也屬于MVC中的model層,它的主要功能是把用戶提交過來的參數(shù)封裝成一個對象給Dao層也就是Hibernate操作。
3.4.3 Service層
引用對應(yīng)的Dao數(shù)據(jù)庫操作,在這里可以編寫自己需要的代碼(比如簡單的判斷、校驗等操作)。
3.4.4 Action層
引用對應(yīng)的Service層,在這里依據(jù)配置文件,跳轉(zhuǎn)到指定的頁面,當(dāng)然也能接受頁面?zhèn)鬟f的請求數(shù)據(jù),也可以做些計 算處理。
3.4.5 顯示層
一個或多個HTML頁面為模型提供數(shù)據(jù)顯示,HTML頁面主要使用HTML標(biāo)記和Freemarker標(biāo)簽來顯示數(shù)據(jù)。
綜上所述,各層之間的關(guān)系為:action調(diào)用service中的方法,service調(diào)用dao中的方法,調(diào)用時的參數(shù)使用entity傳遞,最后把結(jié)果顯示在HTML界面,以響應(yīng)用戶請求。
4 Estore的個性化功能(Personalization capabilities
of estore )
4.1 Estore標(biāo)簽的執(zhí)行流程
標(biāo)簽是Estore中的一個重要概念,利用它可以執(zhí)行許多操作,比如對搜索結(jié)果分頁、獲得商品品牌的列表、獲得商品子欄目的列表等,它的執(zhí)行流程如下:
(1)訪問某個頁面(如:頁頭導(dǎo)航欄.html),瀏覽器執(zhí)行解析代碼,執(zhí)行到標(biāo)簽時跳轉(zhuǎn)到后臺estore-context.xml文件。
(2)estore-context.xml文件中,假如有,在里面找標(biāo)簽對應(yīng)的class文件(如shop_Category),再找對應(yīng)的*.java文件。
(3)到后臺執(zhí)行CategoryListDirective類中默認(rèn)方法execute(如:[@shop_Category parentId=category.id],參數(shù):父類別ID parentId)。
(4)CategoryListDirective類鏈接數(shù)據(jù)庫,獲取目標(biāo)數(shù)據(jù)并放入Map集合:
如:Map origMap = DirectiveUtils.addParamsToVariable(env, paramsWrap)。
(5)將獲取的目標(biāo)數(shù)據(jù)返回給前臺,通過標(biāo)簽展示:
[@shop_Category]
首頁
[#list tag_list as ctg]
${ctg.name}
[/#list]
[/@shop_Category]
4.2 制作“商業(yè)廣告位”
一幅色彩絢麗、形象生動的廣告作品,能以其非同凡響的美感力量增強(qiáng)廣告的感染力,使消費者沉浸在商品和服務(wù)形象給予的愉悅中,使其自覺接受廣告的引導(dǎo)。在Estore平臺上,可以為網(wǎng)站的首頁添加一個“商業(yè)廣告位”,具體步驟如下:
(1)在系統(tǒng)后臺的“輔助”中的菜單“廣告版位”,添加一個“版位”,(如:頁中廣告)。
注意:記錄下此時的“ID”(如ID=6)。
(2)“廣告管理”中,修改“頁中廣告”,選擇圖片之后,改一下圖片地址,去掉“/u”(如:把‘/u/201403/231829044ug5.jpg’變?yōu)?lsquo;/201403/231829044ug5.jpg’)。
(3)在“\WEB-INF\t\store\tpl\include\”下,新建文件“頁中廣告位.html”,內(nèi)容如下:
注意:此處的ID,其值取自第(1)步中的ID。
(4)在“首頁”相應(yīng)的廣告位置,加入如下語句:[#include "../include/頁中廣告位.html"/]。
至此,即在網(wǎng)站首頁添加了一個“商業(yè)廣告位”,根據(jù)客戶的需求,只需要更改后臺的廣告圖片,即可在網(wǎng)站首頁看到客戶的廣告宣傳。
4.3 Estore的后臺處理流程
當(dāng)用戶剛接觸Estore時,可能對其后臺的處理流程有點頭痛,不知道應(yīng)該如何學(xué)習(xí),常常會感覺到無從下手,本文以訪問后臺的主界面為例,特在此做出一個簡要的介紹,用戶可以按照以下步驟來了解其處理過程:
(1)用戶查看瀏覽器端的訪問請求路徑,看要訪問資源的后綴名,如“localhost:8080/storeOracle/eadmin/estore/index.do”的后綴名為“*.do”。
注意:“eadmin/estore/”是虛擬訪問路徑,它在web.xml中設(shè)置。
(2)web.xml文件的重要標(biāo)簽:
EStoreAdmin
/eadmin/estore/*
注意:①因為擴(kuò)展名為“.do”,所以找到值為“/eadmin/estore/*”的。
②“eadmin/estore/”是虛擬訪問路徑,在此處設(shè)置。
(3)去所有的action文件里找到相應(yīng)“@RequestMapping”的value等于“index.do”的方法,看該方法返回什么字符串(如:“login”)。
(4)去estore-servlet-admin.xml中找到id="freemarkerViewResolver"的bean,該bean中name分別為“prefix”、“suffix”的標(biāo)簽的value的值,正好和步驟(3)中的“login”組成文件名“/estore _sys/login.html”;系統(tǒng)將此頁面返回,用戶即可直接訪問。
(5)登錄頁login.html會向名叫“index.do”的action發(fā)送請求,按照步驟(3)和(4)操作后,可以直接訪問文件“/estore_sys/index.html”。
(6)文件“/estore_sys/index.html”里嵌套有“主體框架”:
(7)在main.html里,又有左右兩部分frame:
至此,Estore系統(tǒng)后臺的主界面全部形成。
5 結(jié)論(Conclusion)
通過研究可以證明,利用Spring MVC可以快速地開發(fā)一個具有良好架構(gòu)的電子商務(wù)網(wǎng)站,并且易于維護(hù)、支持?jǐn)U展,這大大地提高了建站的效率,節(jié)省了大量的時間和精力。同時,電子商務(wù)網(wǎng)站的開發(fā)還應(yīng)考慮安全支付、快速物流等問題,這是今后需要研究的對象。
參考文獻(xiàn)(References)
[1] Java 2 Platform,Enterprise Edition Specification Version l.2[EB/0L].java.sun.com/J2ee/docus.Htm,2014-05-23.
[2] 陸榮幸,等.J2EE平臺上MVC設(shè)計模式的研究與實現(xiàn)[J].計算機(jī)應(yīng)用研究,2003,3:144-146.
[3] 何成萬,余秋惠.MVC模型2及軟件框架Struts的研究[J].計算機(jī)工程,2002,6:274-281.
[4] 高昂,衛(wèi)文學(xué).基于Hibernate與Struts框架的數(shù)據(jù)持久化應(yīng)用研究[J].計算機(jī)應(yīng)用,2005,12:2817-2820.
[5] 冷威龍.Freemarker[EB/OL].baike.baidu.com/view/1278430.htm,2014-05-23.
作者簡介:
岳紹敏(1988-),男,碩士研究生在讀.研究領(lǐng)域:智能系統(tǒng).
王國春(1978-),男,碩士,講師.研究領(lǐng)域:軟件工程與智能系統(tǒng).
篇5
關(guān)鍵詞:MVC 模型數(shù)據(jù)綁定 數(shù)據(jù)篡改
中圖分類號:TP393.4 文獻(xiàn)標(biāo)識碼:A 文章編號:1007-9416(2016)04-0000-00
1 概述
.NET MVC框架的出現(xiàn)對發(fā)展起到了巨大的推動作用,它顛覆了傳統(tǒng)通過CodeBehind技術(shù)將程序界面aspx文件與邏輯代碼vb文件或cs文件分離,由于基于Model(模型)、View(視圖)和Controller(控制器)的架構(gòu)模式,使得開發(fā)者能夠更加清晰地表達(dá)業(yè)務(wù)邏輯。模型是應(yīng)用程序中用于處理應(yīng)用程序數(shù)據(jù)邏輯的部分,通常模型對象負(fù)責(zé)在數(shù)據(jù)庫中存取數(shù)據(jù)。視圖是應(yīng)用程序中處理數(shù)據(jù)顯示的部分,通常視圖是依據(jù)模型數(shù)據(jù)創(chuàng)建的。控制器是應(yīng)用程序中處理用戶交互的部分,通常控制器負(fù)責(zé)從視圖讀取數(shù)據(jù),控制用戶輸入,并向模型發(fā)送數(shù)據(jù)[1]。在Web開發(fā)中,表單的應(yīng)用是十分廣泛的。用戶的注冊、登錄、修改信息等業(yè)務(wù)都需要通過表單來實現(xiàn),表單的內(nèi)容則會被提交到服務(wù)端進(jìn)行處理,因此,表單數(shù)據(jù)的安全性極為重要。這里所說的安全性包括兩個層面,一個層面是數(shù)據(jù)本身是否符合指定的范圍或格式,另外一個層面是數(shù)據(jù)是否被篡改。本文討論的是后者,即表單數(shù)據(jù)如何防止被篡改[2]。
2 表單模型數(shù)據(jù)綁定和篡改
.NET MVC框架的應(yīng)用給我們帶來了很多便利,數(shù)據(jù)模型的綁定讓我們快速形成視圖,而不必糾結(jié)HTML界面和業(yè)務(wù)邏輯之間來回傳值。Html.TextBoxFor、Html.DropDownListFor等方法為模型和HTML表單控件提供了雙向綁定,這種綁定無疑把我們從Request和HTML標(biāo)簽中解放出來。圖1是MVC框架中各組件之間的關(guān)系,其中模型和視圖之間的關(guān)系是通過綁定來實現(xiàn),模型信息的改變通過綁定傳遞數(shù)據(jù)到視圖;視圖則通過對表單進(jìn)行操作從而獲取或修改模型信息。
一般情況下,上述模型數(shù)據(jù)的綁定是相對安全的,可以通過表單的客戶端驗證和服務(wù)端驗證進(jìn)行控制。但在有些情況下,篡改的表單數(shù)據(jù)通過了表單客戶端驗證和服務(wù)端驗證,這樣會對系統(tǒng)的安全產(chǎn)生很大的威脅。
圖2所示通過將模型綁定數(shù)據(jù)到表單控件,用戶名被設(shè)置成為不可修改,后臺用戶名為主鍵,在此,只能對用戶姓名和用戶類型進(jìn)行修改,用戶名對應(yīng)的表單控件代碼在紅色矩形框中標(biāo)識。
通常情況下,上述修改用戶姓名和用戶類型是安全的,但通過Chrome瀏覽器的開發(fā)者工具、Firebug頁面調(diào)試工具等可以對頁面內(nèi)容進(jìn)行篡改。如圖3所示,通過工具對用戶名表單控件進(jìn)行修改,去掉表單控件的disabled屬性,將用戶名的value修改為lisi。這樣以來,表單提交的數(shù)據(jù)修改的是lisi用戶的信息。通過這種方式,無形中借用了zhangsan的權(quán)限修改了lisi的信息,這種潛在的“漏洞”給用戶數(shù)據(jù)帶來的巨大的威脅。
3 處理方法
上述問題的根本原因在于客戶端數(shù)據(jù)的不可信性。解決的辦法可以在進(jìn)入用戶信息編輯表單時將用戶名記錄到Session中,這樣即使客戶端對用戶名進(jìn)行修改了,也不會對Session中的用戶名進(jìn)行修改,最后提交表單的時候,我們只是獲取表單的姓名和用戶類型信息,用戶名從Session中讀取,表單中的用戶名只是給客戶端起到一個展示的作用。
4 結(jié)語
在日益復(fù)雜的Web應(yīng)用中,各種各樣的框架以及技術(shù)給我們的開發(fā)工作帶來了極大的便利,然而在獲取這些便利的同時,我們更應(yīng)該思考應(yīng)用技術(shù)過程中隱含的“副作用”。在快速構(gòu)建Web應(yīng)用程序的過程中,客戶的體驗、數(shù)據(jù)的安全性、應(yīng)用的穩(wěn)定性等都是不能忽視的方面。
參考文獻(xiàn)
[1] Jon Galloway,Phil Haack,Brad Wilson,K. Scott Allen 著.孫遠(yuǎn)帥 譯. MVC 3高級編程[M].清華大學(xué)出版社,2012.
[2] 張炳帥 著.Web安全深度剖析[M].電子工業(yè)出版社,2015.
篇6
關(guān)鍵詞:MVC;MVP;MVVM
1MVC框架
MVC(Model View Controller)是把軟件系統(tǒng)分為模型、視圖、控制器3個基本部分。M是指數(shù)據(jù)模型,V是指用戶界面,c則是控制器。使用MVC的目的是將M和V的實現(xiàn)代碼分離,從而使同一個程序可以使用不同的表現(xiàn)形式。比如一批統(tǒng)計數(shù)據(jù)可以分別用柱狀圖、餅圖來表示。C存在的目的則是確保M和V的同步,一旦M改變,V應(yīng)該同步更新。
圖1為Java實現(xiàn)的MVC模型,Java MVC模式是將Servlet,Jsp和JavaBean結(jié)合起來的技術(shù)。Servlet適合數(shù)據(jù)處理,JavaBean用于模型,而Jsp適合顯示。這個模式充分發(fā)揮了每項技術(shù)的優(yōu)點。
在早期的WEB開發(fā)中,因為業(yè)務(wù)比較簡單,并沒有這3層的劃分。用戶數(shù)據(jù)的呈現(xiàn)及輸入的接收、封裝、驗證、處理、以及對數(shù)據(jù)庫的操作,都放在Jsp頁面中。隨著業(yè)務(wù)越來越復(fù)雜,需要考慮更好的利用OOP來解決問題。于是便把業(yè)務(wù)邏輯抽取出來并形成與顯示和持久化無關(guān)的一層,能夠讓業(yè)務(wù)邏輯清晰,產(chǎn)品更便于維護(hù)。這就是SUN當(dāng)初倡導(dǎo)的JSP Model1開發(fā)方式。
Modell模式的實現(xiàn)比較簡單,適用于快速開發(fā)小規(guī)模項目。但從工程化的角度看,局限性非常明顯:JSP頁面身兼View和Controller2種角色,將控制邏輯和表現(xiàn)邏輯混雜在一起,從而導(dǎo)致代碼的重用性非常低,增加了應(yīng)用的擴(kuò)展性和維護(hù)的難度。
Jsp Model2中引入了MVC框架,使用了3種技術(shù)JSP、Servlet和JavaBeans,Jsp負(fù)責(zé)生成動態(tài)網(wǎng)頁,只用做顯示頁面。Servlet負(fù)責(zé)流程控制,用來處理各種請求的分派。JavaBeans負(fù)責(zé)業(yè)務(wù)邏輯,對數(shù)據(jù)庫的操作。
大部分Web應(yīng)用程序都是用像ASP,PHP,或者JSP來創(chuàng)建的。造成了數(shù)據(jù)庫查詢語句這樣的數(shù)據(jù)層代碼和像HTML這樣的表示層代碼混在一起。由經(jīng)驗的開發(fā)者會將數(shù)據(jù)從表示層分離開來,交由后臺處理,但這通常不是很容易做到的,它需要精心的計劃和不斷的嘗試。而使用MVC框架,應(yīng)用程序被分成3個核心部件:模型、視圖、控制器,各自處理自己的任務(wù)。盡管使用MVC框架需要付出一些額外的工作,但是給人們帶來的好處是無庸質(zhì)疑的。
視圖(View)代表用戶交互界面,通常由網(wǎng)頁組成。在早期WEB開發(fā)中,網(wǎng)頁的數(shù)據(jù)嵌入在頁面中,無論頁面打開多少次,頁面內(nèi)容也不會發(fā)生變化,這種頁面稱為靜態(tài)網(wǎng)頁。而MVC框架中View視圖中的數(shù)據(jù)來源于數(shù)據(jù)庫,隨著數(shù)據(jù)庫數(shù)據(jù)的變化,頁面中的數(shù)據(jù)也會隨著發(fā)生改變,稱之為動態(tài)網(wǎng)頁,現(xiàn)在比較流行的動態(tài)網(wǎng)頁開發(fā)技術(shù)由Jsp、Asp和Php。Java的MVC模型就是采用的Jsp動態(tài)開發(fā)技術(shù),因此View的頁面由jsp網(wǎng)頁組成。在View層只涉及數(shù)據(jù)的顯示,和數(shù)據(jù)的采集,不涉及視圖的業(yè)務(wù)處理。比如最常見的登錄頁面,登錄視圖只是把登錄的信息進(jìn)行收集并提交,不對登錄的信息做判斷。
模型(Model):就是業(yè)務(wù)流程/狀態(tài)的處理以及業(yè)務(wù)規(guī)則的制定。在MVC的3個部件中,模型擁有最多的處理任務(wù)。視圖中的數(shù)據(jù)由Model來提供,當(dāng)需要改變視圖中的數(shù)據(jù)時,不需要修改WEB頁面,只需要修改相應(yīng)的Model即可。MVC框架中Model層的主要關(guān)注點是如何把請求的數(shù)據(jù)自動裝配成Action所需要的bean,除此外,框架Model層還可以提供復(fù)合bean自動裝配、輸入校驗、本地化及國際化、字符集編碼轉(zhuǎn)換、多重輸出等功能。比如上述的登錄系統(tǒng),就是由Model層來完成登錄賬號和密碼的判定。由于應(yīng)用于模型的代碼只需寫一次就可以被多個視圖重用,所以減少了代碼的重復(fù)性。
控制(Controller)接受用戶的輸入并調(diào)用模型和視圖去完成用戶的需求。Java MVC中的控制層由Servlet來實現(xiàn)??刂茖硬⒉粚?shù)據(jù)做處理,而是根據(jù)視圖的提交要球,來決定調(diào)用相對應(yīng)的模型。比如上述的登錄系統(tǒng),控制器的作用就是接收View層提交的信息,并把這個信息傳給對應(yīng)的Model去處理,然后把處理后的結(jié)果,再返回給View層。
MVC的優(yōu)點:(1)可以為一個模型在運行時同時建立和使用多個視圖。變化-傳播機(jī)制可以確保所有相關(guān)的視圖及時得到模型數(shù)據(jù)變化,從而使所有關(guān)聯(lián)的視圖和控制器做到行為同步。(2)視圖與控制器的可接插性,允許更換視圖和控制器對象,而且可以根據(jù)需求動態(tài)的打開或關(guān)閉、甚至在運行期間進(jìn)行對象替換。(3)模型的可移植性。因為模型是獨立于視圖的,所以可以把一個模型獨立地移植到新的平臺工作。需要做的只是在新平臺上對視圖和控制器進(jìn)行新的修改。(4)潛在的框架結(jié)構(gòu)??梢曰诖四P徒?yīng)用程序框架,不僅僅是用在設(shè)計界面的設(shè)計中。
MVC的不足體現(xiàn)在以下幾個方面:(1)MVC并沒有很明確的定義,所以完全理解MVC并不是很容易。并且內(nèi)部實現(xiàn)原理比較復(fù)雜和多樣,對于新手來說需要花費一些時間去思考。(2)視圖與控制器的可接插性,造成模型和視圖的分離,這樣也給調(diào)試應(yīng)用程序帶來了一定的困難。(3)MVC的實現(xiàn)比較復(fù)雜,并不適合小型甚至中等規(guī)模的應(yīng)用程序,花費大量時間將MVC應(yīng)用到規(guī)模并不是很大的應(yīng)用程序通常會得不償失。
2MVP框架
MVC(Model-View-Controller,模型-視圖-控制器)模式是80年代Smalltalk-80出現(xiàn)的一種軟件設(shè)計模式,后來得到了廣泛的應(yīng)用,其主要目的在于促進(jìn)應(yīng)用中模型、視圖、控制器間的關(guān)注的清晰分離。MVP(Model-View-Presenter,模型視圖-表示器)模式則是由IBM開發(fā)出來的一個針對C++和Java的編程模型,大概出現(xiàn)于2000年,是MVC模式的一個變種,主要用來隔離UI、UI邏輯和業(yè)務(wù)邏輯、數(shù)據(jù)。
Model-View-Presenter旨在應(yīng)用程序分層和提高測試效率,主要目標(biāo)是將顯示邏輯與業(yè)務(wù)邏輯分離,正如設(shè)計面向?qū)ο蟪绦蛑袆?chuàng)建松散耦合并可重用的對象。MVP的另一個目標(biāo)是提高針對View的測試效率。編寫依賴Session,ViewState,AJAX,HTML或web控件和業(yè)務(wù)實體的單元測試類較為復(fù)雜,因此將各視圖的顯示邏輯保留在ASPX/ASCX文件類中,并將業(yè)務(wù)邏輯從中分離出來放在相應(yīng)的類中,在MVP中Presenter充當(dāng)視圖和業(yè)務(wù)邏輯的緩沖層。
MVC和MVP的區(qū)別:在MVP里,Presenter把Model層和View層進(jìn)行了完全的分離,View并不直接使用Model,主要的業(yè)務(wù)邏輯在Presenter里實現(xiàn)。而且,Presenter與具體的View是沒有直接關(guān)聯(lián)的,而是通過定義好的接口進(jìn)行交互,從而使得在變更View時候可以保持Presenter的不變,達(dá)到了重用的效果,而在MVC中View會從直接Model中讀取數(shù)據(jù)而不是通過Controlle如圖2所示。
從圖中可以看到,在MVC里,View是可以直接訪問Model的,View里會包含Model信息,因此不可避免的還要包括一些業(yè)務(wù)邏輯。在MVC模型里,更注重業(yè)務(wù)的邏輯,也就是Model的不變,而針對Model,則有不同的顯示及View。所以,在MVC模型里,View是依賴于Model的,但是Model不依賴于View。并且,如果有一些業(yè)務(wù)邏輯在View里實現(xiàn)了,則導(dǎo)致要更改View也是比較困難的,因為View中的業(yè)務(wù)邏輯是無法重用的。
在MVP模式里,View只有簡單的Set/Get的方法,用來輸入和設(shè)置界面顯示的內(nèi)容,除此就不應(yīng)該有更多的內(nèi)容,絕不容許直接直接訪問Model,而這就是與MVC很大的不同之處。
MVP的優(yōu)點:(1)View和Model實現(xiàn)了完全分離,可以修改View而不影響Model。(2)業(yè)務(wù)邏輯的處理更加集中,便于控制。(3)多個View可以共用一個Presener,便于代碼的重用。(4)業(yè)務(wù)邏輯集中在Presenter中,便于進(jìn)行單元測試。
MVP的缺點:由于對View的控制放在了Presenter中,造成了View和Persenter的交互會過于頻繁。這樣會增加View和Presenter的耦合性,一旦View發(fā)生了變化,Presenter也需要進(jìn)行變化。比如,原來的Html網(wǎng)頁顯示的是Word文檔,但是新求需要將Word文檔轉(zhuǎn)換為PDF文檔顯示,那么就需要更改View和Presenter。
3MVVM框架
MVVM是3層架構(gòu),M層(Model實體層)、V層(View表示層)、VM層(ViewModel層,對Model層進(jìn)行CRUD進(jìn)行操作,同時對V層提供數(shù)據(jù)綁定)。對這種模式的實現(xiàn),大部分都是通過在view層聲明數(shù)據(jù)綁定來和其他層分離的,這樣就方便了前端開發(fā)人員和后端開發(fā)人員的分工,前端開發(fā)人員在html標(biāo)簽中寫對Viewmodel的綁定數(shù)據(jù),Model和Viewmodel是后端開發(fā)人員通過開發(fā)應(yīng)用的邏輯來維護(hù)這兩層。
最近幾年,MVVM模式在Javascript中開始有人實現(xiàn),目前比較成熟的框架有KnockoutJS,Avalon MVVM和Knockback.js,原理如圖3所示。
(1)infoChannel:信息通道,主要用于向后臺發(fā)起數(shù)據(jù)請求。(2)dataChannel:數(shù)據(jù)通道,主要用于存儲從后臺獲取到的數(shù)據(jù)。(3)moleManage:數(shù)據(jù)操作,主要用于操作數(shù)據(jù)通道中的數(shù)據(jù),如crud操作。(4)modulePool:數(shù)據(jù)倉庫,主要存儲后臺返回的數(shù)據(jù)。(5)crudStorePool:crud實例池,增刪改的數(shù)據(jù),在持久化到數(shù)據(jù)庫之前,都會先存在于此池中。(6)action:后臺數(shù)據(jù)處理及數(shù)據(jù)庫訪問模塊
執(zhí)行流程如下:(1)infoChannel通過調(diào)用服務(wù)器端action獲取數(shù)據(jù)庫數(shù)據(jù)。(2)infoChannel把獲取的數(shù)據(jù)放到內(nèi)存中的modulePool中。(3)dataChannel從modulePool中取數(shù)據(jù),并傳遞到View端。(4)View端的數(shù)據(jù)通過moleManage取出。(5)moleManage把取出的數(shù)據(jù)放到內(nèi)存的crudStorePool中。(6)通過infoChannel把crudStorePool中的數(shù)據(jù)傳遞到后臺,實現(xiàn)數(shù)據(jù)的持久化操作。
ViewModel的具體應(yīng)用:(1)在前端開發(fā)中如需初始化某一模塊的數(shù)據(jù)可以調(diào)用dataChnannel中的initViewData(viewld,dataStoreParam)方法。(2)如需查詢某一節(jié)點的數(shù)據(jù)集,可以調(diào)用dataChnannel中的getDataByPath(viewId,path)。(3)如需進(jìn)行crud操作,可以調(diào)用moleManage中的相關(guān)方法。
ViewModel解決的問題:(1)向后臺的多請求操作改為通過接口統(tǒng)一調(diào)用。(2)是一個前后端通信的中間件,具有可插拔性,適用于文檔型及關(guān)系型數(shù)據(jù)庫。(3)實現(xiàn)了單例模式,避免多個實例操作同一個對象。(4)緩存大數(shù)據(jù),避免頻繁向后臺請求數(shù)據(jù)。
4Model層
Model層同其他的MVC框架一樣,Model代表特定領(lǐng)域的數(shù)據(jù)或者應(yīng)用所需的數(shù)據(jù),一個典型的特定領(lǐng)域的數(shù)據(jù)如用戶信息,或者一部電影的信息。
Model僅僅關(guān)注數(shù)據(jù)信息,不關(guān)心任何行為;不格式化數(shù)據(jù)或者影響數(shù)據(jù)在瀏覽器中的展現(xiàn);格式化數(shù)據(jù)是View層的任務(wù),同時業(yè)務(wù)邏輯層被封裝在Viewmodel中,用來和Model進(jìn)行交互。在Model層做的一個比較意外的行為是對數(shù)據(jù)的驗證,比如當(dāng)用戶輸入用戶名的時候,判斷用戶名的格式是否正確,是否有非法字符等。Model基本是按照上面的定義來實現(xiàn)的,但是會有通過ajax調(diào)用服務(wù)器服務(wù)來進(jìn)行讀寫Model數(shù)據(jù)。
MVVM框架是衍生于MVC框架的,兩者之間的最大區(qū)別在于,MVC框架中的Controller是由是由高級編程語言實現(xiàn)的,比如用Java實現(xiàn)的MVC框架,Controller是由servlet實現(xiàn),而在View中,也會用到部分的Jsp代碼;而MVVM框架中的ViewModel則是由腳本語言Javascript實現(xiàn),在View界面將不會用到Jsp代碼,從而實現(xiàn)了前端和后臺的完整分離。
優(yōu)點:(1)MVVM使并行開發(fā)更加容易,使前端開發(fā)和后端開發(fā)人員互不影響。(2)抽象化View層,減少了代碼中的業(yè)務(wù)邏輯。(3)ViewModel比事件驅(qū)動更容易測試。(4)ViewModel的測試不用關(guān)心UI的自動化和交互。
缺點:(1)對于簡單的UI,使用MVVM有點太重。(2)聲明式的數(shù)據(jù)綁定不利于調(diào)試,因為命令式的代碼可以和容易的設(shè)置斷點,這種模式就不利于設(shè)置這樣的斷點。(3)在不挑剔(non-trivial)的應(yīng)用里數(shù)據(jù)綁定可以創(chuàng)建大量的簿記(book-keeping)。(4)在大的應(yīng)用中,在獲取大量的概要(generalization)前很難設(shè)計視圖模型層。
篇7
【關(guān)鍵詞】PHP ThinkPHP MVC 電子商務(wù) 架構(gòu)設(shè)計
1 紅酒交易平臺的需求分析
紅酒交易平臺是銷售酒類、培訓(xùn)、器皿、酒窖定制服務(wù)的電子商務(wù)平臺,支持PC端瀏覽器、手機(jī)端瀏覽器、微信端以及Android端和iOS端。
本文從功能性需求和非功能性需求兩個方面進(jìn)行需求分析。
1.1 功能性需求分析
本平臺有三個主要功能和一個主要流程:品類管理、促銷管理、訂單管理和購物流程。
1.1.1 品類管理
主要是管理商品的分類和商品管理。
1.1.2 促銷管理
支持各種促銷手段:滿額贈送、限時搶購、買N送N、特價促銷等。
1.1.3 訂單管理
平臺收到訂單后,如果是已經(jīng)支付的訂單或者是貨到付款的訂單,備貨后輸入物流單號和物流公司發(fā)貨。用戶如果退貨,平臺允許退貨并收到用戶退貨后,退款給該用戶。
1.1.4 購物流程
用戶瀏覽商品并加入購物車,如果該商品符合促銷條件,自動在購物車放入贈品,用戶確認(rèn)訂單并支付,等待平臺發(fā)貨,用戶收到貨物后確認(rèn)到貨并評價。
1.2 非功能性需求分析
1.2.1 安全要求
對于需要登錄后才能訪問的頁面要禁止非法訪問等。
1.2.2 性能要求
網(wǎng)絡(luò)正常的情況下,大于2MB/秒,1000人以下并發(fā)訪問頁面打開時間最多不超過5秒。
2 紅酒交易平臺MVC框架的選擇
通過技術(shù)平臺選型,考察 MVC、Struts2、Spring MVC、ThinkPHP、Laravel等多個MVC框架后,結(jié)合技術(shù)團(tuán)隊能力、國內(nèi)流行程度等因素,將 MVC、Struts2、ThinkPHP作為備選技術(shù)方案。ThinkPHP中的MVC提供了一種敏捷開發(fā)的手段,使得開發(fā)者能夠迅速地開發(fā)出穩(wěn)定的企業(yè)級網(wǎng)站。ThinkPHP在中小型應(yīng)用中,學(xué)習(xí)成本最低、開發(fā)效率最高,所以在國內(nèi)PHP MVC框架應(yīng)用中占據(jù)了將近50%的市場份額。本平臺是一個中等規(guī)模的網(wǎng)站,根據(jù)前述非功能性需求分析得出,并發(fā)訪問量要求不高,且用戶預(yù)算低、開發(fā)周期短,所以決定平臺采用ThinkPHP框架。
3 紅酒交易平臺的架構(gòu)設(shè)計
3.1 平臺架構(gòu)的設(shè)計
為了進(jìn)一步壓縮成本,縮短開發(fā)時間,從架構(gòu)設(shè)計上既要滿足前述用戶需求,又要減少開發(fā)工作量。因此平臺通過共用控制器和模型,采用多視圖的方法滿足用戶PC端、手機(jī)端、微信端瀏覽本平臺的需求,由于Anroid端和iOS端采用Hybrid APP混合框架,內(nèi)嵌了瀏覽器,所以本架構(gòu)也能給予很好的支持。前端則采用Bootstrap框架進(jìn)行快速頁面布局和前端編程。Bootstrap是最受歡迎的 HTML、CSS 和 JS 框架,用于開發(fā)響應(yīng)式布局、移動設(shè)備優(yōu)先的 WEB 項目。根據(jù)需求分析,本平臺部分技術(shù)架構(gòu)設(shè)計如圖1所示。
限于篇幅,本架構(gòu)主要展示了平臺Home前臺的架構(gòu)設(shè)計,前臺Home和后臺Admin共用Common\Model,前臺PC端View和移動端MobileView共用了前臺Controller,從而減少了開發(fā)冗余,提高了代碼復(fù)用率。
3.2 前臺控制器基類的實現(xiàn)
FrontController是前臺控制器的基類,只有一個方法_initialize,繼承該基類的前臺控制器都會執(zhí)行該方法。_initialize方法通過ismobile函數(shù)判斷,如果是手機(jī)端或者微信端瀏覽,則通過C(‘DEFAULT_V_LAYER’,’MobileView’)函數(shù)將默認(rèn)視圖層從View目錄改成MobileView目錄,從而改成適合手機(jī)瀏覽的網(wǎng)頁,而控制器類和模型類無需修改。用戶沒有登錄,即判斷$_SESSION[‘USER’]為空,如果用戶訪問了需要登錄才能訪問的控制器方法,使用$this->redirect方法將鏈接重定向登錄方法,強(qiáng)制用戶登錄。
4 結(jié)束語
MVC輕量級ThinkPHP框架,基于面向?qū)ο蟮乃枷?結(jié)合使用了Ajax技術(shù),使整個系統(tǒng)功能清晰明了。本平臺選擇ThinkPHP框架進(jìn)行架構(gòu)設(shè)計,采用多個視圖共用一個控制器方法的方式支持多終端設(shè)備瀏覽器以及Hybrid APP混合框架里的內(nèi)嵌瀏覽器,滿足了紅酒交易平臺的功能性需求和非功能性需求,提高了開發(fā)效率、縮短開發(fā)工期并節(jié)約開發(fā)成本,具有較好的技術(shù)推廣價值。
參考文獻(xiàn)
[1]徐誠斌,王金平.MVC在ThinkPHP框架中的應(yīng)用研究[J].信息與電腦:理論版,2011(03):160-160.
[2]Bootstrap中文W.Bootstrap中文文檔[EB/OL]./, 2014-10-31/2016-12-7.
[3]許燕.基于ThinkPHP框架的校園交易平臺的設(shè)計與實現(xiàn)[J].信息技術(shù)與信息化,2016(07):34-37.
作者簡介
陳棟良(1975-),男,江蘇省宜興市人。碩士學(xué)位?,F(xiàn)為蘇州工業(yè)園區(qū)服務(wù)外包職業(yè)學(xué)院講師。研究方向為軟件技術(shù)。
篇8
關(guān)鍵詞: MVC;多層架構(gòu);素質(zhì)教育;課程管理;管理系統(tǒng)
中圖分類號:TP311 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2013)30-6804-02
按照教育部、教育廳的相關(guān)要求,各高職院校以學(xué)生素質(zhì)教育課程改革為突破口,面向全體學(xué)生,結(jié)合專業(yè)教育,積極探索高職素質(zhì)教育的新途徑、新方法,將素質(zhì)教育融入人才培養(yǎng)全過程。因此,為配合學(xué)生素質(zhì)教育課程改革,采用信息系統(tǒng)加強(qiáng)對素質(zhì)教育的課程及實踐活動開設(shè)、教學(xué)任務(wù)分配、成績錄入等全過程進(jìn)行管理勢在必行。
1 學(xué)生素質(zhì)教育課程管理系統(tǒng)分析
根據(jù)學(xué)生素質(zhì)教育課程實施工作的要求,學(xué)生素質(zhì)教育管理系統(tǒng)的主要功能包括:課程信息管理、活動信息管理、選活動管理、任務(wù)分配管理、課程成績管理、系統(tǒng)管理等功能,系統(tǒng)功能結(jié)構(gòu)如圖1所示。
2 學(xué)生素質(zhì)教育課程管理系統(tǒng)設(shè)計
學(xué)生素質(zhì)教育課程管理系統(tǒng)功能復(fù)雜,為了使得學(xué)生素質(zhì)教育課程管理系統(tǒng)邏輯結(jié)構(gòu)合理,提高軟件的開發(fā)效率,降低系統(tǒng)的維護(hù)成本,提升系統(tǒng)的可擴(kuò)展性和可維護(hù)性,因此學(xué)生素質(zhì)教育課程管理系統(tǒng)設(shè)計采用基于.Net的多層架構(gòu)解決方案,WEB層采用了 MVC(視圖引擎為Razor)框架技術(shù),視面組件方面使用了Telerik組件技術(shù),JS框架采用強(qiáng)大的JQuery技術(shù),服務(wù)層采用基于WCF技術(shù)的SOA框架,服務(wù)層采用基于技術(shù)的AOP框架,數(shù)據(jù)持久層采用基于Entity Framework技術(shù)的ORM框架。學(xué)生素質(zhì)教育課程管理系統(tǒng)整體架構(gòu)設(shè)計如圖2所示。
1)WEB層設(shè)計
系統(tǒng)WEB層采用 MVC框架技術(shù)設(shè)計。 MVC是微軟官方提供的MVC模式編寫 Web應(yīng)用程序的一個框架,MVC主要用于表示一種軟件架構(gòu)模式,它把WEB應(yīng)用系統(tǒng)分為三個基本部分:模型(Model)、視圖(View)和控制器(Controller)。
學(xué)生素質(zhì)教育課程管理系統(tǒng)WEB層MVC框架中視圖部件使用Telerik組件技術(shù)及基于JQuery的JS框架技術(shù)實現(xiàn)了課程管理頁面、活動管理頁面等WEB頁面的展現(xiàn)。控制器部件主要處理課程管理、活動管理等頁面與服務(wù)器的交互操作,通過服務(wù)層調(diào)用課程管理、活動管理等服務(wù)進(jìn)行數(shù)據(jù)處理。模型組件與實體類對應(yīng),主要封裝了系統(tǒng)中課程、活動、學(xué)生活動、課程任務(wù)、活動任務(wù)、課程成績等核心數(shù)據(jù)以及邏輯功能。
2)服務(wù)層設(shè)計
系統(tǒng)服務(wù)層采用基于WCF技術(shù)的SOA框架設(shè)計,WCF是.NET框架的一部分,是微軟發(fā)展的一組數(shù)據(jù)通信的應(yīng)用程序開發(fā)接口,它能將不同的通訊方式整合在一起,提供一種統(tǒng)一的編程模型。
WCF通過配置文件定義服務(wù)以及消費服務(wù)完成服務(wù)端配置與客戶端配置。服務(wù)端配置主要完成服務(wù)節(jié)點的綁定,主要包含CourseServiceNode(課程服務(wù)節(jié)點)、ActivityServiceNode(活動服務(wù)節(jié)點)、StudentServiceNode(學(xué)生服務(wù)節(jié)點)、TeacherServiceNode(教師服務(wù)節(jié)點)、DepartmentServiceNode(部門服務(wù)節(jié)點)、StudentActivityServiceNode(學(xué)生活動服務(wù)節(jié)點)、CourseTaskServiceNode(課程任務(wù)服務(wù)節(jié)點)、ActivityTaskServiceNode(活動任務(wù)服務(wù)節(jié)點)等服務(wù)節(jié)點??蛻舳伺渲弥饕瓿煽蛻舳私K結(jié)點的屬性來連接系統(tǒng)服務(wù)終端結(jié)點的配置。
3)服務(wù)層設(shè)計
系統(tǒng)服務(wù)層是采用基于技術(shù)的AOP框架設(shè)計,它是.NET企業(yè)應(yīng)用開發(fā)的應(yīng)用程序框架,為業(yè)務(wù)對象提供面向?qū)ο缶幊痰闹С?,通過IApplicationContext、IObjectFactory核心接口實現(xiàn)依賴注入(Ioc)功能。
在學(xué)生素質(zhì)教育課程管理系統(tǒng)服務(wù)層設(shè)計中主要是完成CourseService(課程服務(wù))、ActivityService(活動服務(wù))、StudentService(學(xué)生服務(wù))、TeacherService(教師服務(wù))、DepartmentService(部門服務(wù))、StudentActivityService(學(xué)生活動服務(wù))、CourseTaskService(課程任務(wù)服務(wù))、ActivityTaskService(活動任務(wù)服務(wù))等服務(wù)的依賴注入并建立與服務(wù)節(jié)點的映射關(guān)系。
4)數(shù)據(jù)持久層設(shè)計
系統(tǒng)服務(wù)層是采用基于Entity Framework技術(shù)的ORM框架設(shè)計,Entity Framework是開發(fā)基于的ORM框架,它可以根據(jù)系統(tǒng)對象生成實體數(shù)據(jù)模型(EDM)、實體數(shù)據(jù)類及DAO數(shù)據(jù)操作類,借助實體數(shù)據(jù)模型和實體所承載的數(shù)據(jù)自動生成SQL語句,并實現(xiàn)數(shù)據(jù)自動持久化功能。
在學(xué)生素質(zhì)教育課程管理系統(tǒng)系統(tǒng)數(shù)據(jù)持久層中實體數(shù)據(jù)模型文件為SQECEnites.edmx,主要用于描述實體類與數(shù)據(jù)庫對象的對應(yīng)關(guān)系。系統(tǒng)中包含的主要實體類有:Course(課程)、Activity(活動)、Student(學(xué)生)、Teacher(教師)、Department(部門)、StudentActivity(學(xué)生活動)、CourseTask(課程任務(wù))、ActivityTask(活動任務(wù))等。系統(tǒng)對應(yīng)的DAO數(shù)據(jù)操作類有:CourseDAO(課程數(shù)據(jù)操作)、ActivityDAO(活動數(shù)據(jù)操作)、StudentDAO(學(xué)生數(shù)據(jù)操作)、TeacherDAO(教師數(shù)據(jù)操作)、DepartmentDAO(部門數(shù)據(jù)操作)、StudentActivityDAO(學(xué)生活動數(shù)據(jù)操作)、CourseTaskDAO(課程任務(wù)數(shù)據(jù)操作)、ActivityTaskDAO(活動任務(wù)數(shù)據(jù)操作)等。
3 總結(jié)
學(xué)生素質(zhì)教育課程管理系統(tǒng)開發(fā)中采用基于.NET的多層架構(gòu)體系設(shè)計,在WEB層通過MVC框架技術(shù)實現(xiàn)了系統(tǒng)視圖層和業(yè)務(wù)層分離,從而降低了系統(tǒng)展示與業(yè)務(wù)邏輯的耦合性;在服務(wù)層采用基于WCF技術(shù)的SOA框架設(shè)計,降低了服務(wù)提供者和服務(wù)使用者的松散耦合性;在服務(wù)層采用基于技術(shù)的AOP框架設(shè)計,實現(xiàn)了對業(yè)務(wù)邏輯的各個部分進(jìn)行隔離,降低了業(yè)務(wù)邏輯間的耦合度;在數(shù)據(jù)持久層采用基于Entity Framework技術(shù)的ORM框架設(shè)計,實現(xiàn)數(shù)據(jù)操作與數(shù)據(jù)庫的分離,降低了程序與數(shù)據(jù)庫間的關(guān)聯(lián)性。因此,在開發(fā)WEB應(yīng)用系統(tǒng)中采用基于.NET的多層架構(gòu)體系設(shè)計,可充分發(fā)揮每一層框架技術(shù)的優(yōu)勢,提升系統(tǒng)各模塊的獨立性,提高系統(tǒng)開發(fā)效率及系統(tǒng)的易維護(hù)性、可用性和可伸縮性。
參考文獻(xiàn):
[1] 涂剛,李建,劉華清,紀(jì)永玲,許子昊 MVC的研究[J].軟件工程師,2010(8).
[2] 方柯.基于 MVC框架的Web應(yīng)用開發(fā)研究[J].電腦知識與技術(shù),2010(22).
[3] 張計龍.基于改進(jìn)MVC的高校人事管理系統(tǒng)[J].計算機(jī)工程,2004(8).
[4] 王炯煒,胡宏偉.基于LINQ的三層體系結(jié)構(gòu)應(yīng)用[J].科技信息:學(xué)術(shù)研究,2008(21).
[5] 梁西陳,朱水源.基于.NET的高職院校教師信息管理系統(tǒng)研發(fā)[J].宿州教育學(xué)院學(xué)報,2009(1).
篇9
關(guān)鍵詞:電子商務(wù);Struts 2;作用
中圖分類號:F49文獻(xiàn)標(biāo)識碼:A 文章編號:1672-3198(2012)03-0233-02
1 Struts 2的由來
隨著軟件技術(shù)和Internet的迅猛發(fā)展,以J2EE技術(shù)體系為代表的分布式對象技術(shù)為企業(yè)構(gòu)造新的基于Internet的電子商務(wù)平臺提供了技術(shù)支持。J2EE規(guī)范定義了一個用于簡化分布式企業(yè)級應(yīng)用開發(fā)與部署的基于組件的模式,它提供了一個多層次的分布式應(yīng)用模型和一系列開發(fā)技術(shù)規(guī)范,為搭建具有可伸縮性、靈活性、易維護(hù)性的電子商務(wù)系統(tǒng)提供了良好的機(jī)制。隨著J2EE技術(shù)的不斷完善和發(fā)展,有幾種開源免費的框架出現(xiàn)在J2EE設(shè)計中,這些新出現(xiàn)的框架為中小企業(yè)提供了一個經(jīng)濟(jì)的、快速開署的、穩(wěn)定而可擴(kuò)展的可行方案,使得他們可以使用開源技術(shù)來構(gòu)建企業(yè)級應(yīng)用。其中,Struts就是比較優(yōu)秀的開源框架。
Struts 1是第一個的MVC框架,它由Apache開源軟件聯(lián)盟提供的用于構(gòu)建JavaWeb應(yīng)用程序的框架,該框架推出后,就得到了廣泛Java Web開發(fā)者的擁護(hù),經(jīng)過長達(dá)6年時間的發(fā)展,Struts 1框架更加成熟、穩(wěn)定,性能也有了很好的保證。因此,到目前為止,Struts 1依然是世界上使用最廣泛的MVC框架。但是由于些設(shè)計上的缺陷成為它未來發(fā)展的障礙。為了給Java Web開發(fā)人員提供一個更好的框架,提出了Struts 2的新模式。Struts 2雖基于Struts 1發(fā)展,但并不是以Struts 1為核心,而是采用Web Work為核心,尤其是吸收了Struts 1和 Web Work兩者的優(yōu)勢。
2 Struts 2的核心思想
Struts目前已經(jīng)分化為兩個框架:第一個框架是shale,此框架可以說幾乎脫離了Struts的設(shè)計思想,它不僅僅是對Struts的升級,而是另辟空間發(fā)展。第二個就是Struts 2框架,Struts 2的核心設(shè)計思想是基于Web work框架基礎(chǔ)上發(fā)展的,它的特點是兼容struts 1和Web work兩種框架,并且取長補(bǔ)短的開發(fā)理念,開發(fā)中兼顧了struts 1的部分優(yōu)點,同時注入了Web work的思想。Struts 2的體系結(jié)構(gòu)同樣也實現(xiàn)了MVC設(shè)計模式的概念,它將這些概念映射到Web應(yīng)用程序的組件和概念中。Struts 2是使用Servlet和Java Server Pages技術(shù)的一種MVC實現(xiàn),而MVC是用來控制Web項目中的變化,提高項目的復(fù)用性和可維護(hù)性,所以應(yīng)用Struts 2框架就是用來改進(jìn)在目前Web開發(fā)中存在的不足之處。Struts 2繼承了MVC的各項特性,并根據(jù)J2EE的特點,做了相應(yīng)的變化與擴(kuò)展。圖1是Struts 2的MVC體系結(jié)構(gòu)圖。
Struts 2技術(shù)框架所具有的很多特性使得它非常適合作為Web系統(tǒng)的應(yīng)用開發(fā)過程中。主要特點如下:
①Struts 2大量使用攔截器來處理用戶請求,從而允許用戶的業(yè)務(wù)邏輯控制器與Servlet API分離。
②Struts 2是一個雅致的,可擴(kuò)展的,用來建立企業(yè)級Java Web應(yīng)用程序的框架。
③Struts 2不但注重程序的開發(fā)過程,更注重部署和后期維護(hù)。
④Struts 2來源于Web Work 2。
⑤Struts 2融合了Struts和Web Work的社區(qū)力量,是這兩個社區(qū)努力的結(jié)果。
⑥Struts 2非常容易使用。
⑦Struts 2最大可能的保留了和Struts 1.x的相似行。
(2)Struts 2的體系結(jié)構(gòu)。
Struts 2使用攔截器作為處理(Advice),以用戶的業(yè)務(wù)邏輯控制器為目標(biāo),創(chuàng)建一個控制器。控制器負(fù)責(zé)處理用戶請求,處理用戶請求時回調(diào)業(yè)務(wù)控制器的execute方法,該方法的返回值將決定了Struts 2將怎樣的視圖資源呈現(xiàn)給用戶。
由于客戶端瀏覽器初始化一個指向Servlet容器的請求;然后Struts 2的核心控制器FilterDispatcher接受客戶發(fā)來的請求,進(jìn)行相應(yīng)的判斷調(diào)用指定的Action操作;攔截器對請求啟用相應(yīng)功能;接下來ActionInvocation實例使用命名模式來回調(diào)Action的execute方法,該execute方法先獲取用戶請求參數(shù),然后它會調(diào)用業(yè)務(wù)邏輯組件來處理用戶的請求;最后將execute方法的處理結(jié)果返回到客戶端的瀏覽器中完成處理過程。
(3)Struts 2的組成及配置。
Struts 2框架主要由三個部分組成:核心控制器FilterDispatcher、業(yè)務(wù)控制器和用戶實現(xiàn)的業(yè)務(wù)邏輯組件。Struts 2框架只提供了核心控制器部分的功能,而業(yè)務(wù)控制器和用戶實現(xiàn)的業(yè)務(wù)邏輯組件功能需要程序開發(fā)人員獨立完成。
由于Struts 2的核心與Struts 1有著本質(zhì)的區(qū)別,也就決定了Struts 2的配置與Struts1有一定的區(qū)別。我們需要加載Struts 2框架那么應(yīng)該首先在Web.xml文件中加載前面提到的核心控制器FilterDispatcher,這樣控制器會加載Struts 2框架。
Struts 2框架有兩個核心配置文件,其中struts.xml文件主要負(fù)責(zé)管理應(yīng)用中的Action映射,以及該Action包含的Result定義等。在原始狀態(tài)下,Struts 2框架將默認(rèn)的路徑下是加載放在Web-INF/classes的struts.xml文件。但是由于在Web應(yīng)用中,隨著系統(tǒng)的需求,各個功能模塊不斷增加修改等,系統(tǒng)中Action數(shù)量會越來越繁多,如果我們選擇默認(rèn)的struts.xml配置文件,那么整個文件會變得非常繁雜,不利于后期維護(hù)。為了避免struts.xml文件過十繁雜,提高struts.xml文件的可讀性,我們將struts.xml分解成多個配置文件,然后在struts.xml文件中包含其他配置文件。解決這一問題可以用include方式導(dǎo)入各個功能模塊的文件。當(dāng)然也可以根據(jù)用戶自己需要來劃分,本系統(tǒng)采用的是按模塊劃分。
Struts 2框架包含的另一個核心文件是struts.properties,該文件定義了Struts 2框架的屬性,我們可以設(shè)置相應(yīng)屬性來達(dá)到開發(fā)程序的需求。Struts.properties文件是一個標(biāo)準(zhǔn)的Properties文件,該文件包含了系列的key-value對象,每個key就是一個Struts 2屬性,該key對應(yīng)的value就是一個Struts 2屬性值。struts.properties文件通常放在Web應(yīng)用的Web-INF/classes路徑下。實際上,只要將該文件放在Web應(yīng)用的CLASSPATH路徑下,Struts 2框架就可以加載該文件。
3 總結(jié)
隨著網(wǎng)絡(luò)信息技術(shù)的發(fā)展,網(wǎng)絡(luò)應(yīng)用在人們?nèi)粘I钪性絹碓绞艿街匾?,人們越來越希望在較短的時間內(nèi)買到自己所需要的東西。但是市場上的商品種類很多,人們要想購買到自己需要的商品,不得不花費很多時間,給購買帶來了麻煩。網(wǎng)上購物系統(tǒng)彌補(bǔ)了傳統(tǒng)購物的許多不足之處,有效地縮短了傳統(tǒng)購物過程中的流通環(huán)節(jié),有著經(jīng)營成本低、庫存虛擬,用戶查看商品方便,減少了地域限制等特點。Struts 2是現(xiàn)今開發(fā)技術(shù)中運用最廣泛的開源框架技術(shù)之一。Struts 2框架具有組件的模塊化,靈活性和重用性的優(yōu)點,同時簡化了基于MVC的Web應(yīng)用程序的開發(fā)。
參考文獻(xiàn)
[1]徐明華,邱加永.Struts基礎(chǔ)與案例開發(fā)詳解[M].北京:清華大學(xué)出版社,2009.
[2]黃金雪.基于Struts和Hibernate的框架模型在銀行信貸管理系統(tǒng)的研究[D].成都:西南交通大學(xué),2008.
[3]郭梅,江紅.Struts在實現(xiàn)MVC架構(gòu)中的應(yīng)用[J].計算機(jī)與現(xiàn)代化,2004,(1):2834.
篇10
關(guān)鍵詞:struts+ hibernate架構(gòu);MVC框架;自動組卷模塊;擴(kuò)展性
中圖分類號:TP311文獻(xiàn)標(biāo)識碼:A文章編號:1009-3044(2008)25-1473-03
The Designation and Realization of Item Pool System Based Struts + Hibernate Framework
JIANG Jiao-li, JIANG Yong-ping, HUANG Feng-ai
(Information Engineering of Guangdong University of Technology, Guangzhou 510006,China)
Abstract:The traditional B/S item pool system has the issue that page code redundance , lowlly reusability of the function module,maintained hardly and so on.This article proposedthe design conception of item pool system basedStruts + Hibernate framework, According to their superiority supplementary characteristic,Completedthe MVC model and the lasting level conformity.Take the automatic group volume module realization as an example,conform that it has guaranteed system each internal close coupling well, Layer upon layer between loose coupling, Simultaneously strengthened the code reusability and the flexibility, further strengthens the system the extension.
Key words: Struts+Hibernate construction; MVC framework; auto-composing test paper module; expansibility
1 引言
隨著計算機(jī)和網(wǎng)絡(luò)的普及,國內(nèi)外目前已經(jīng)存在很多比較成熟的認(rèn)證考試,比如:我國的計算機(jī)等級考試,美國的GRE,托??荚嚨?。為了順應(yīng)計算機(jī)網(wǎng)絡(luò)時代的發(fā)展,考核方式逐步趨向無紙化,解決高校課程內(nèi)容繁多,教學(xué)資源要求更豐富的難題,學(xué)校必須提高自身的考核方式,擁有自己的題庫系統(tǒng)。而系統(tǒng)的實現(xiàn)技術(shù)的選擇也是非常重要的。其中利用比較成熟的具有跨平臺性的Java技術(shù)實現(xiàn)是首選,因為J2EE體系結(jié)構(gòu)提供中間層集成框架能滿足無需太多費用而又需要高可用性、高可靠性以及可擴(kuò)展性的應(yīng)用的需求。本文所介紹的題庫系統(tǒng)主要考慮到:傳統(tǒng)的基于B/S模式的題庫系統(tǒng)開發(fā)具有頁面代碼冗余度高,功能模塊可重用性低,擴(kuò)展性差,維護(hù)困難等問題;在軟件設(shè)計中采用基于MVC模式的Struts+Hibernate框架技術(shù)實現(xiàn)整個系統(tǒng)。本文將以題庫系統(tǒng)的設(shè)計為例,分別介紹Struts和Hibernate框架,重點分析兩個框架的優(yōu)勢互補(bǔ)的特點,并以題庫系統(tǒng)的架構(gòu)設(shè)計來完成Struts+Hibernate框架的整合,最后詳細(xì)介紹了自動組卷功能模塊的實現(xiàn)以及解決的問題,說明Struts和Hibernate框架在題庫系統(tǒng)實現(xiàn)上的應(yīng)用。
2 題庫系統(tǒng)功能描述
題庫系統(tǒng)根據(jù)實際需要將實際用戶分為三類權(quán)限管理:管理員、教師、學(xué)生??傁到y(tǒng)架構(gòu)分為兩大模塊:后臺教師管理模塊、前臺考試模塊。題庫系統(tǒng)的總體框架結(jié)構(gòu)圖1所示。
題庫系統(tǒng)前臺用戶主要是學(xué)生,學(xué)生登錄前臺可以完成在線考試、考卷提交、考試成績查詢、修改用戶基本資料等操作。
本系統(tǒng)最重要的是后臺管理模塊的實現(xiàn),管理員登陸后臺管理界面后,可進(jìn)行用戶信息管理、題庫信息管理、考試試卷管理、考務(wù)信息管理、其他管理模塊的操作,下面對各模塊的基本功能進(jìn)行大概介紹。
用戶信息管理模塊:管理員可添加、刪除、修改學(xué)生信息;設(shè)置教師權(quán)限,使管理員和教師都能對題庫和其他基本功能進(jìn)行操作。
題庫信息管理模塊:這個模塊主要用來操作單選題,多選題、判斷題、填空題、簡答題的添加、刪除和修改,并可以根據(jù)指定專業(yè)、知識點進(jìn)行精確題目查詢。
考試試卷管理模塊:主要是根據(jù)不同專業(yè),難度系數(shù)的設(shè)定等條件抽題生成試卷,并對生成并且未試卷進(jìn)行修改,同時還支持套題管理。
考務(wù)信息管理模塊:管理員/教師在考試前對生成試卷狀態(tài)進(jìn)行控制,、中止考試試卷;考試結(jié)束后對客觀題進(jìn)行評分,系統(tǒng)自動完成主觀題和客觀題的總分相加,得出總分并生成考生考試情況統(tǒng)計供管理員/教師查詢。
其他管理模塊:這個模塊主要用來添加班級信息和考試知識點信息。
3 系統(tǒng)開發(fā)技術(shù)運用及架構(gòu)整合
3.1 基于MVC模式的struts+hibernate框架設(shè)計策略
MVC(Model-View-Controller)設(shè)計模式將系統(tǒng)分成模型層、視圖層、控制層三層,大大減少在設(shè)計系統(tǒng)中的代碼的“冗余度”,降低了頁面顯示、邏輯控制、數(shù)據(jù)處理的耦合性。目前有很多可供MVC使用的web框架,Struts就是其中的一種,相比較其他框架而言,Struts是一種開源框架,它能使你的代碼具有高度的平臺無關(guān)性,提供了對開發(fā)MVC系統(tǒng)的底層支持,它的目的是為了幫助你減少在運用MVC設(shè)計模型來開發(fā)Web應(yīng)用的時間。利用Struts來開發(fā)能夠很好地實現(xiàn)各層之間的散耦合[2-3]。