陳 輝,丁春莉,孫 悅
(陜西交通職業技術學院 陜西 西安 7100180)
軟件架構模式[1](Design pattern)是一套比較通用的軟件開發流程和代碼編寫規范,也是很多編程設計人員的代碼設計經驗總結。使用軟件架構模式的目的是為了有效的組織程序架構,提高代碼的可重用性、保證代碼可靠性。
目前有多種軟件構建模式被開發者使用,例如三層框架模式、Struts模式和MVC開發模式,其中MVC開發模式是Trygve Reenskaug提出的一種開發模式,最早出現在Smalltalk中,后來普遍用于Java開發中,近年來基于Java的Web開發中的主流開發模式都是基于MVC的軟件架構模式。在Java的開源框架中,著名的Struts架構就是MVC模式典型應用。由于MVC軟件架構模式的優秀特性,微軟也在VS2008的ASP.NET的開發中開始支持ASP.NET MVC開發模式,該模式是ASP.NET WebForms后的又一種開發方式。它提供了一系列優秀特性,使ASP.NET開發人員擁有了另一個選擇。
在.NET平臺下的ASP.NET MVC解決方案,不但具備ASP.NET的易用性,而且也繼承了MVC的優秀架構,大大降低了開發復雜度,JavaWeb開發框架Struts要更直觀,更容易上手。也對Ajax技術有更好的支持[2]。
ASP.NET MVC要優于Java平臺上的Struts和Struts2。使用Struts實現MVC時,除了要寫一堆ActionForm、Action和ActionResult外,還需要進行各種復雜的xml映射配置文件。Struts2雖然不用再寫ActionForm,并且降低了侵入度 (其實Struts2和Struts關系不大,而基本可以認為是WebWork的后續版本),但是仍無法避免xml配置文件。
微軟提出的.NET框架,是基于微軟開發集成工具Visual Stdio中應用的開發架構,可以只用在微軟的主流開發語言C#、J#、VB等中。可以比較方便跨平臺移植,具有較高的開發效率、部署簡單及支持軟件自動更新等特點,逐漸成為各類系統開發工具的首選[3]。我院開發學生實訓管理系統系統中應用了MVC開發技術,重復的利用這種技術的分層開發的特點,開發小組分工合作,開發效率較以往項目提高了30%以上。并且開發完成的項目的代碼質量較高,軟件也具有較好的健壯性。
MVC(Model-View-Controller,模型—視圖—控制器模式)用于表示一種軟件架構模式。它把軟件系統分為3個基本部分:模型(Model),視圖(View)和控制器(Controller),基本結構如圖 1所示。
圖1 MVC模型的基本結構Fig.1 Basic structure of the MVCmodel
MVC框架組件的基本功能如下[4]:
1)模型對象的部分應用程序實現的邏輯應用程序的數據域,封裝應用程序狀態,并呈現應用程序的功能。通常,模型對象檢索和模型狀態存儲在一個數據庫中。例如,一個產品對象可能會從數據庫中檢索信息,操作它,然后寫回產品的更新信息表在SQL Server數據庫。
2)視圖是顯示的組件應用程序的用戶界面(UI)。視圖通常可以表示模型,并且可以向控制器發送用戶的輸入,允許控制器選擇不同的視圖進行操作。通常,這個UI創建從模型數據。 一個例子將是一個產品表的編輯視圖顯示文本框,下拉列表,根據當前狀態的復選框產品對象。
3)控制器的組件處理用戶交互,使用模型,并最終選擇一個視圖顯示UI的呈現。 在MVC應用程序中,視圖只顯示信息;控制器處理和響應用戶輸入和交互。例如,控制器處理query-string值,并將這些值傳遞給模型,進而可能使用這些值來查詢數據庫。
MVC模式可以幫助您創建單獨的應用程序應用程序的不同方面(輸入邏輯、業務邏輯和UI邏輯),同時提供這些元素之間的松散耦合。3個主要組件之間的松散耦合的MVC應用程序也促進并行開發。
采用MVC的軟件設計模式的目的是關注點分離,不同的開發人員可以專注于架構中的不同位置,例如,一個開發人員可以在視圖中,第二個開發人員可以使用控制器邏輯,和第三個開發人員可以專注于業務邏輯的模型。MVC架構主要的優點集中在以下幾個方面[5-6]:
首先,采用這種模式可以將數據與業務邏輯從界面層中分離出來,多個視圖可以同時共享一個模型,這樣可以極大提高代碼的重用,提高編程的效率。在開發中可以更好的進行分工,有利于提高軟件的開發質量。
第二,在視圖和控制器中封裝的業務邏輯,與具體的底層數據庫沒有直接的關聯,只有模型層封裝了對具體數據庫訪問的邏輯,如果進行數據庫移植就,就只要改變模型中具體的訪問代碼,無需改變視圖和控制器,因此可以提高程序的可維護性。
在學生實訓管理系統是一個基于B/S結構的WEB應用程序,主要功能是對學生上機實訓的作業發布管理、作業提交管理、作業考評管理、考勤管理、在線考試管理等功能。該應用開發的目標主要是為了在實訓機房中系統地管理實訓整個過程,改變以往教師每次布置作業后學生完成練習后提交作業,這樣的過程相互不關聯,沒有系統管理的過程,不能很好地評估一門課程在整個學期中實訓的情況(包括學生實訓考勤、教師的布置的上機任務和學生的上機提交作業等等)。整個系統采用基于MVC4框架的ASP.NET進行開發,開發環境采用Visual Studio 2010,后臺數據庫使用SQL Sever2005。系統的軟件構架如圖2所示。
圖2 學生實訓管理系統的軟件架構Fig.2 Students practice management system software architecture
在學生實訓管理系統軟件設計中,采用MVC構架進行系統設計,首先進行系統分析,設計的步驟是從底層開始,首先設計是完成數據訪問設計,在此基礎上進行模型的設計和實現,然后以此為基礎設計控制器,最后完成視圖的設計。系統的功能模塊如圖3所示。
圖3 系統功能模塊圖Fig.3 System functional block diagram
根據系統功能需求分析,劃分了相應的系統功能模塊,在vs2010中使用ASP.NET MVC4框架創建WEB應用程序進行開發,系統框架物理結構圖如4所示。
Model對象表示實體類,在ASP.NET MVC框架中,模型是負責應用程序或業務邏輯的應用部件,模型類并不直接處理HTTP的請求,也不生成HTTP的輸出,模型通常是使用數據庫訪問類獲取所需要的數據,并對數據根據需要執行相應的業務邏輯,并將數據提交給控制器[7]。
在學生實訓管理系統開發中,首先創建模型類的抽象基類Entity,在Entity中封裝了數據庫訪問的代碼,主要的模型類包括:
圖4 系統框架物理結構圖Fig.4 System framework of physics charts
1)學生(Student)
2)教師(Teacher)
3)實訓作業對象(TrainWork)
4)實訓考試試卷(TrainPaper)
5)學生成績(StudentScore)
這些模型類與數據庫的表相對應。主要用來對數據庫相應的數據表進行操作。基本數據庫操作包括數據庫表的增、刪、改、查操作,在Entity類中添加4個抽象方法,模型類實現Entity抽象類的虛擬方法。對具體的數據表進行操作。
控制器是程序的中樞,在程序中連接模型和視圖,起到承上啟下的作用,復制對用戶的輸入進行響應,根據用戶的不同輸入,執行相應的行為,調研模型中的業務邏輯代碼,最后將結果返回給用戶,控制器主要是復制數據的傳送,根據業務邏輯的執行結果,決定轉向不同的視圖,給用戶呈現不同的結果[8]。
根據程序的功能,需要對控制器進行規劃設計。本程序中包括用戶登陸、作業發布、作業提交、成績發布、在線考試等模塊,每個模塊需要一個控制器類,在類中實現該模塊所需的控制器方法。以作業發布模塊控制器為例,設計如下:
將控制器和Action的框架設計以后,有助于了解網站與用戶的交互,控制器與視圖之間的信息傳遞。完成控制器和模型的設計之后,就可以進行設計的設計。
視圖的作用是提供一個數據顯示和與用戶交互的窗口,在MVC中可以使用Action創建視圖頁面,通透Visual Studio中的“新增視圖”功能,可以創建HTML頁面。以這樣的HTML頁面為基礎進行后續的開發,可以簡化頁面編寫的工作。
在設計視圖之前,通常需要設計母版頁面,這種母版頁面是一個模板,在頁面中通常添加一些在網站中某一類頁面共有的一些要素,例如LOGO,版權信息等等。在實訓管理系統的作業瀏覽控制器WorkPubController中,包含Index、WorkList、WorkDetail 3 個 Action,每個 Action 中,控制器的作用是定位并執行Action方法,并確保它能正確執行;獲取Action方法所需的參數并傳遞給它;捕獲Action方法執行期間出現的錯誤;提供“WebFormViewFactory”類以便生成ASP.NET頁面類型的視圖。每個Action方法對應一個視圖,使用VS2010可以自動創建Action對應的視圖。例如,在本項目中,創建的TrainWorkDetail視圖,采用實訓作業對象(TrainWork)模型創建強類型視圖,將傳遞TrainWork對象給視圖模板作為它的模型類。
本項目采用在MVC4中的Razor引擎創建視圖,Razor的兩大主要功能是模板文件和動態編譯器。ASPX的視圖引擎依靠<%和%>來調用C#指令。而MVC3以后有了一套新的使用@標記的Razor語法,使用起來更靈活更簡潔。 Razor引擎語法設計如下:
使用使用MVC模式進行系統開發,最大的優點就是便于團隊開發和良好的重用性,例如在系統設計中開始設計了實訓作業瀏覽視圖,在后期根據需要,可以顯示指定日期段的實訓作業視圖,其中模型類和初始視圖不需要進行修改,只要增加一個新的指定日期段的實訓作業視圖就可以實現新的額功能。在這種模式下,視圖、控制器和模型之間的關系示意圖如圖5所示。
圖5 視圖、控制器和模型之間的關系示意圖Fig.5 View,controller and model schematic diagram
通過在學生實訓管理系統ASP.Net平臺的MVC設計模式,開發小組深刻的體會到了這種開發模式相比較普通三層開發模式的優越性,特別是對合作開發的便捷性是其他開發模式不能比擬的。目前學生實訓管理系統已經在我院的實訓室應用了一個學期,使用效果良好,深受實訓教師的好評,通過本項目的開發,開發小組也深刻的理解了這種開發模式的優越性,為今后的系統開發提供了良好的借鑒。
[1]甄鐳.NET與設計模式[M].北京:電子工業出版社,2005.
[2]倪芳.基于MVC的電子商務系統的設計與實現[D].廈門:廈門大學,2014
[3]曹國民,陳根才,施文幸.基于.NET平臺的電力生產管理系統建模與實現[J].計算機工程與設計,2008,29(1):170-172.CAOGuo-min,CHEN Gen-cai,SHI Wen-xing.Based on the.NET platform modeling and realization of electric power management system [J].Computer engineering and design,2008,29(1):170-172.
[4]黃保翕.ASP.NET MVC4開發指南[M].北京:清華大學出版社,2013.
[5]劉亮,霍劍青,郭玉剛,等.基于MVC的通用型模式的設計與實現[J].中國科學技術大學學報,2010,40(6):635-640.LIU Liang,HUO Jian-qing,GUO Yu-gang,et al.MVC-based design and implementation of general purpose pattern[J].Journal of China University of science and technology,2010,40(6):635-640.
[6]莫勇騰.深入淺出設計模式[M].北京:清華大學出版社,2006.
[7]伍海波,匡靜,朱承學,等.基于MVC的教學資源管理系統的設計與實現[J].計算機技術與發展,2014,24(7):214-217.WU Hai-bo,KUANG Jing,ZHU Cheng-xue,et al.Teaching resources management system based on MVC design and implementation[J].Computer Technology and Development,2014,24(7):214-217.
[8] 候捷,陳碩.Stanley B.lippman.C#Primer(中文 版)[M].武漢:華中科技大學出版社,2003.