劉澤波,劉太甫
(黃岡職業(yè)技術(shù)學(xué)院成教學(xué)院,湖北黃岡438002)
當(dāng)前Web應(yīng)用為用戶提供了一種全新解決方案以改善用戶的應(yīng)用體驗(yàn)和應(yīng)對(duì)人們對(duì)Web應(yīng)用日益苛刻的要求,Web應(yīng)用要不斷滿足簡(jiǎn)化開發(fā)的復(fù)雜性、需求的可變性和快速開發(fā)的要求。在這個(gè)背景下,高校需要利用現(xiàn)代Web開發(fā)技術(shù)構(gòu)建一個(gè)自學(xué)考試統(tǒng)一信息管理平臺(tái),從而實(shí)現(xiàn)數(shù)據(jù)共享、應(yīng)對(duì)日益擴(kuò)大的規(guī)模和提高信息管理效率。
MVC設(shè)計(jì)的目的是要填平人類用戶的思維模式和計(jì)算機(jī)的數(shù)字模型之間的鴻溝。自2007年秋微軟宣布將以ASP.NET為核心創(chuàng)建基于MVC的現(xiàn)代 Web開發(fā)平臺(tái)-ASP.NET MVC框架,并于2009年3月13日發(fā)布 ASP.NET MVC 1版本,其后幾乎每年都推出一個(gè)新版本,功能越來(lái)越強(qiáng)大和靈活。
MVC主旨在于簡(jiǎn)化軟件開發(fā)的復(fù)雜度,以一種概念簡(jiǎn)單、權(quán)責(zé)分明的架構(gòu)來(lái)引導(dǎo)開發(fā)流程,將業(yè)務(wù)邏輯層和數(shù)據(jù)表現(xiàn)層分離,編寫具有模塊化和易維護(hù)性的程序。MVC將應(yīng)用程序劃分為三個(gè)主要單元:模型(M)、視圖(V)、控制器(C),它們有各自的工作職責(zé)。模型處理與數(shù)據(jù)有關(guān)的任務(wù),描述了要處理的數(shù)據(jù)以及修改和操作數(shù)據(jù)的業(yè)務(wù)規(guī)則。視圖負(fù)責(zé)所有與用戶有關(guān)的接口,主要用于向用戶展示信息和接收用戶的輸入??刂破魇且晥D和模型之間主要的銜接,用于處理來(lái)自用戶、整個(gè)應(yīng)用程序流以及特定應(yīng)用程序邏輯的通信。
ASP.NET MVC使開發(fā)人員可以在.NET平臺(tái)上,借助MVC設(shè)計(jì)模式開發(fā)Web應(yīng)用以發(fā)揮其獨(dú)特優(yōu)勢(shì):(1)分解關(guān)注點(diǎn)與可維護(hù)性:其非常清楚的“分解關(guān)注點(diǎn)”架構(gòu)既能使項(xiàng)目易于維護(hù),也能使項(xiàng)目可以應(yīng)對(duì)需求的變更,以加快項(xiàng)目開發(fā)速度和提高客戶滿意度。(2)可擴(kuò)展性:ASP.NET MVC框架的組件都是可定制可替換設(shè)計(jì)的,可以替換原有的顯示引擎、URL重寫策略或者其他模塊以適應(yīng)特殊需求。(3)可測(cè)試性:其本身就是基于分離的結(jié)構(gòu)讓應(yīng)用程序的測(cè)試性得到大大的提升。(4)約定優(yōu)于配置:ASP.NET MVC應(yīng)用程序?qū)s定的依賴性很強(qiáng),這樣可避免開發(fā)人員配置具體化約定可以設(shè)置的項(xiàng)目,簡(jiǎn)化應(yīng)用程序開發(fā)工作。
面向?qū)ο箝_發(fā)方式是主流開發(fā)范式,開發(fā)人員是同樣以面向?qū)ο蟮乃季S方式分析解決對(duì)數(shù)據(jù)庫(kù)的操作問(wèn)題,理想的做法是開發(fā)人員使用面向?qū)ο蠹夹g(shù)的同時(shí)并提供訪問(wèn)不同類型數(shù)據(jù)源的統(tǒng)一方式標(biāo)準(zhǔn),這恰好是對(duì)象關(guān)系映射技術(shù)的終極目標(biāo)。Entity Framework是微軟的標(biāo)準(zhǔn)ORM解決方案,是在ADO.NET數(shù)據(jù)訪問(wèn)和LINQ查詢技術(shù)基礎(chǔ)上構(gòu)建全新的完整數(shù)據(jù)訪問(wèn)框架。
采用Entity Framework開發(fā)應(yīng)用程序優(yōu)點(diǎn)是明顯的,一方面可讓開發(fā)人員通過(guò)以應(yīng)用程序?yàn)橹行牡母拍钅P蛠?lái)進(jìn)行工作,不用對(duì)特定的數(shù)據(jù)源有硬編碼依賴性。另一方面開發(fā)人員在改變概念模型和特定存儲(chǔ)架構(gòu)之間的映射時(shí)可不更改應(yīng)用程序代碼,使用可映射到各種存儲(chǔ)架構(gòu)的一致應(yīng)用程序?qū)ο竽P停瑫r(shí)LINQ為查詢提供針對(duì)概念模型的編譯時(shí)語(yǔ)法驗(yàn)證。
自學(xué)考試統(tǒng)一信息管理平臺(tái)系統(tǒng)架構(gòu)如圖1所示。
圖1 自學(xué)考試統(tǒng)一信息管理平臺(tái)架構(gòu)
表現(xiàn)層:它是用戶與系統(tǒng)交互的主要接口,它將后臺(tái)數(shù)據(jù)通過(guò)一定的格式向用戶展現(xiàn),同時(shí)可接收用戶的請(qǐng)求,通過(guò)與業(yè)務(wù)邏輯層交互協(xié)調(diào)處理用戶請(qǐng)求。系統(tǒng)的表現(xiàn)層在處理客戶端請(qǐng)求和頁(yè)面邏輯采用ASP.NET MVC3框架,使用jQuery技術(shù)并結(jié)合圖片、CSS控制和展現(xiàn)頁(yè)面布局和設(shè)計(jì)。系統(tǒng)應(yīng)用流程由ASP.NET MVC中的View接收HTTP請(qǐng)求,然后發(fā)送到Controller并根據(jù)請(qǐng)求內(nèi)容更新Model,最后將Model加載到對(duì)應(yīng)的View。
業(yè)務(wù)邏輯:它負(fù)責(zé)表現(xiàn)層和數(shù)據(jù)訪問(wèn)層的連接,在架構(gòu)中起到承上啟下的作用。業(yè)務(wù)邏輯層主要功能是按業(yè)務(wù)需求處理數(shù)據(jù),它根據(jù)前臺(tái)不同的請(qǐng)求和系統(tǒng)業(yè)務(wù)定義的規(guī)則,通過(guò)對(duì)封裝在倉(cāng)儲(chǔ)模型中的添加、修改、刪除和查詢等方法(數(shù)據(jù)訪問(wèn)層)的請(qǐng)求調(diào)用進(jìn)行數(shù)據(jù)處理,調(diào)用者將獲取返回的數(shù)據(jù)處理結(jié)果。在本項(xiàng)目設(shè)計(jì)中,業(yè)務(wù)邏輯層直接在控制器中實(shí)現(xiàn)并調(diào)用。數(shù)據(jù)訪問(wèn)層:在系統(tǒng)中基于Entity Framework實(shí)現(xiàn)數(shù)據(jù)訪問(wèn)層,系統(tǒng)使用EF產(chǎn)品組新發(fā)布的實(shí)用工具(EFPower Tool)自動(dòng)生成以提高開發(fā)效率。在實(shí)體數(shù)據(jù)模型建立以后,編碼人員利用數(shù)據(jù)倉(cāng)儲(chǔ)模式將所有系統(tǒng)業(yè)務(wù)需求的數(shù)據(jù)訪問(wèn)方法進(jìn)行封裝,方便系統(tǒng)業(yè)務(wù)邏輯層調(diào)用。數(shù)據(jù)倉(cāng)儲(chǔ)充分利用LINQ技術(shù)在實(shí)體集合的基礎(chǔ)上處理相對(duì)復(fù)雜的數(shù)據(jù)訪問(wèn)邏輯。
自學(xué)考試統(tǒng)一信息管理平臺(tái)開發(fā)過(guò)程中,使用Visual Studio 2010作為集成開發(fā)環(huán)境,選擇C#4.0作為服務(wù)器后臺(tái)的編程語(yǔ)言,選定ASP.NET MVC 3框架為 Web前端技術(shù)。由于安裝 ASP.NET MVC3后同時(shí)自動(dòng)安裝Entity Framework 4.1,所以項(xiàng)目直接使用的Entity Framework 4.1和倉(cāng)儲(chǔ)模式實(shí)現(xiàn)模型。
根據(jù)項(xiàng)目需求和現(xiàn)有自學(xué)考試信息數(shù)據(jù)及結(jié)構(gòu),經(jīng)過(guò)詳細(xì)地分析和設(shè)計(jì),在SQL Server 2008上設(shè)計(jì)和構(gòu)建系統(tǒng)所需的數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)中有19張數(shù)據(jù)表保存系統(tǒng)相關(guān)數(shù)據(jù)。主要數(shù)據(jù)包含考生信息數(shù)據(jù)、成績(jī)數(shù)據(jù)、專業(yè)和課程數(shù)據(jù)、通知信息數(shù)據(jù)和用戶基本數(shù)據(jù),輔助數(shù)據(jù)主要保存與學(xué)生信息相關(guān)的信息,如民族、職業(yè),部門等表,同時(shí)優(yōu)化數(shù)據(jù)庫(kù)表設(shè)計(jì),減少數(shù)據(jù)量和冗余。
4.2.1 布局的實(shí)現(xiàn)
ASP.NET MVC 3中Razor的布局有助于使應(yīng)用程序的多個(gè)視圖保持一致外觀,而且其提供更簡(jiǎn)潔的語(yǔ)法和更大的靈活性。本系統(tǒng)就利用此特性統(tǒng)一了界面的外觀,同時(shí)在布局中渲染分部視圖以顯示復(fù)雜的信息。
4.2.2 Controller和 View 的實(shí)現(xiàn)
系統(tǒng)Controller和View的創(chuàng)建可利用 ASP.NET MVC3框架中的基架為應(yīng)用程序的創(chuàng)建、讀取、更新和刪除(CRUD)功能生成所需的模板代碼。雖然不能奢望它創(chuàng)建整個(gè)應(yīng)用程序,但它可以讓程序員從瑣碎繁雜的工作中解脫出來(lái),避免程序完全手動(dòng)編寫代碼,還可以調(diào)整和編輯基架生成的代碼來(lái)創(chuàng)建自己的應(yīng)用程序。
通過(guò)基架生成Controller時(shí)會(huì)自動(dòng)添加相應(yīng)的視圖文件和代碼,視圖也可任意編輯修改,同時(shí)配合jQuery腳本和CSS樣式文件,以達(dá)到所需的界面顯示需求。這也說(shuō)明了ASP.NET MVC可以對(duì)HTML完全控制,當(dāng)然也可以手動(dòng)編碼產(chǎn)生視圖文件。
4.2.3 第三方組件的應(yīng)用
為了縮短開發(fā)時(shí)間,系統(tǒng)使用了開源組件。利用MvcPager分頁(yè)控件,完成了大量用戶界面的Ajax分頁(yè)顯示;使用Autofac輕量級(jí)控制反轉(zhuǎn)容器有效降低類之間相互耦合,不但能增加架構(gòu)的彈性,也能有效降低系統(tǒng)的復(fù)雜度;還使用了Auto-Mapper對(duì)象映射工具,它是一個(gè)能通過(guò)流暢配置API將映射工作自動(dòng)化產(chǎn)品,解決實(shí)體模型到視圖模型映射單調(diào)乏味的工作。
用戶體驗(yàn)Web應(yīng)用程序,包含大量動(dòng)態(tài)內(nèi)容。動(dòng)態(tài)內(nèi)容是給Web應(yīng)用程序帶來(lái)安全隱患的根源之一,其中跨站腳本攻擊是最重要的安全隱患,目前在安全漏洞中排名第一,并引起開發(fā)人員的廣泛重視。系統(tǒng)中保存大量、不乏敏感和關(guān)鍵的業(yè)務(wù)數(shù)據(jù),所以為了提高系統(tǒng)的數(shù)據(jù)安全性,防止信息泄露和惡意者的攻擊,系統(tǒng)在防止跨站腳本攻擊、開放重定向和Cookie信息泄漏方面都有相應(yīng)的考慮和設(shè)計(jì)。
單元測(cè)試是軟件開發(fā)過(guò)程中的重要環(huán)節(jié),是軟件測(cè)試最小單位,主要是指軟件獨(dú)立被測(cè)試單元在與程序的其他部分完全隔離的前提下開展測(cè)試。單元測(cè)試作為無(wú)錯(cuò)編碼的一種輔助手段,要求測(cè)試必須能重復(fù)執(zhí)行,且其結(jié)果必須是能信任的。單元測(cè)試貫穿于整個(gè)軟件系統(tǒng)的生命周期中,不管是在軟件重構(gòu)還是移植到新的運(yùn)行環(huán)境中,因此可確保系統(tǒng)質(zhì)量。
本文結(jié)合自學(xué)考試統(tǒng)一信息管理平臺(tái)項(xiàng)目的設(shè)計(jì)開發(fā),通過(guò)對(duì)微軟.NET開發(fā)平臺(tái)最新的開發(fā)技術(shù)ASP.NET MVC和Entity Framework的分析和研究,借鑒成熟的分層模式技術(shù)構(gòu)建了系統(tǒng)的三層架構(gòu)設(shè)計(jì),將新技術(shù)融合到一個(gè)完整的解決方案之中,設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)靈活、快速開發(fā)的Web應(yīng)用。雖然新的技術(shù)給.NET平臺(tái)下的Web開發(fā)帶來(lái)了新的活力和改進(jìn),但它仍然存在著如 ASP.NET MVC缺少可重用的 UI控件等問(wèn)題,但隨著ASP.NET MVC和 Entity Framework本身的版本升級(jí)更新的同時(shí),也在不斷地完善和進(jìn)步。
[1]黃保翕.ASP.NET MVC2開發(fā)實(shí)戰(zhàn)[M].電子工業(yè)出版社,2011.
[2](美)米里特.ASP.NET 設(shè)計(jì)模式[M].楊明軍譯.清華大學(xué)出版社,2011.
[3](美)加洛韋.ASP.NET MVC 3 高級(jí)編程[M].孫遠(yuǎn)帥譯.清華大學(xué)出版社,2012.
[4]單東林,張曉菲,魏然.鋒利的 JQuery[M].人民郵電出版社,2009.
[5](美)約克.CSS入門經(jīng)典[M].侯普秀,王一飛譯.清華大學(xué)出版社,2008.
[6]郭鄭州,陳紅軍.SQL Server 2008完全學(xué)習(xí)手冊(cè)[M].清華大學(xué)出版社,2011.
[7]陳技能.NET軟件測(cè)試實(shí)戰(zhàn)技術(shù)大全[M].人民郵電出版社,2008.