饒 浩
(韶關學院信息管理系,韶關512005)
MVC模式下的Web系統快速開發框架設計?
饒 浩
(韶關學院信息管理系,韶關512005)
討論了一種基于MVC(Model模型,View視圖,Controller控制器)模式的Web信息系統快速開發框架,描述了開發框架的設計,介紹了數據庫API封裝、對象關系映射、URL映射表等操作。系統開發被抽象為MVC結構,開發過程在業務規則之下進行最根本的數據模型操作,很好地把系統業務剝離出來實現。快速開發框架的開發周期比較短,開發效率比較高,從開發和維護等角度相比較,比傳統的開發方式更具優勢。
模型-視圖-控制器模式;信息系統;對象關系映射
在當今的信息時代,人們在商業、貿易、經濟等方方面面都離不開信息交互,而在信息交互過程中,Web扮演著非常重要的角色。
在傳統方法的Web應用開發中,系統業務和界面融合一體。開發人員除了要構建核心的業務數據以外,還往往需要花費很多時間和精力處理業務數據的流動及其展現。在做一個應用的時候,往往需要編寫大量的數據庫查詢操作,頻繁地在各種邏輯混雜的代碼中加插經常變化的控制邏輯,使得系統的管理和維護十分艱難。
Web信息系統快速開發框架基于MVC模型進行設計,開發周期比較短,開發效率比較高。通過對象關系映射把數據表映射到對象,并為對象定義幾個基本方法來處理數據,使開發人員能夠把主要精力放在業務數據的處理之上,盡量減少其他邏輯的處理。開發框架將控制器分離出來,通過控制器連接界面和系統業務,其關系為松耦合。松耦合后的系統更加便于維護和管理。控制器采用MVC實現,即Model(業務模型)、View(用戶界面)、Controller(控制器)模式。

圖1 開發框架工作流程圖
MVC模式為Web開發者提供多項功能,具備對數據模型方便直觀的操作方法。在傳統的Web開發過程中建立數據表,對每行數據操作,在快速開發框架中都被映射成對象。對于每個數據模型對象,都有幾個基本的方法,方便進行對象的獲取、插入、修改等操作。視圖能方便地展示業務邏輯處理的結果。視圖是Web開發最終需要展示給用戶的內容,體現了Web信息系統的根本目的,具有統一的控制器,用于調度對業務邏輯的請求,以及視圖的產生。這是用戶請求某個業務并且得到反饋的必經之路,提供簡明的數據模型管理工具。為了方便開發者對數據模型的管理維護,需要提供友好的用戶界面來完成這個功能。維護的內容包括對數據的增加、刪除、更新、統計等基本功能。
系統由Model、View、Controller、數據管理后臺、命令行接口五個子系統有機組合而成。Model部分支撐起對數據庫的封裝,實現統一的存取方法;View部分實現純粹的展現內容的分離處理;Controller部分用于對整個系統進行調度,包括對請求映射到對應的業務邏輯的處理;數據管理后臺實現對用戶定義模型的管理;命令行接口通過命令行提示的形式,提供友好的開發向導。
2.1 Model子系統
Model(業務模型)表示企業數據和業務規則。是應用程序中用于處理應用程序數據邏輯的部分。業務模型通過構件對象來處理數據庫。一個業務模型能為多個視圖提供數據,減少代碼重復。Model子系統由兩個部分組成,一是對數據庫API(Application Programming Interface,應用程序編程接口)和SQL(Structured Query Language,結構化查詢語言)語句的封裝,二是完成ORM(Object Relational Mapping,對象關系映射)操作。
為了把開發者從繁雜的數據庫操作中解放出來,也為了跨數據庫的遷移更加方便,通過給數據庫加一個API封裝層的方法,使得所有對數據庫的操作,都經過這個層的調用。這樣寫出來的程序,具有更好的移植性。對于SQL方式,要為每個支持的數據庫編寫一個處理函數,這個處理函數會檢查或者解析整個SQL語句,修改成自己能夠支持的語句,然后執行。
對于對象關系映射,可采用的辦法是把數據表映射到Python(一種計算機編程語言)類,在這個映射中,數據表被映射成類,每行記錄都被映射成相應的對象,而列則被映射成為對象的屬性。對于對象的處理,主要有兩種情況,一種是從數據庫獲取一個對象,另外一種是產生一個對象,然后存到數據庫里面。
數據庫對象有幾個靜態方法,分別是:conn()、insert(obj)、delete(id)、get(id)、getMany(start,n)、getMany(CriteriaBox)等。Conn()方法用于連接數據庫,如果該數據庫引擎是無連接的引擎,則直接返回成功;insert(obj)用于往數據庫插入一個對象;delete(id)用于根據id從數據庫刪除一個對象;get(id)用于根據id從數據庫來獲取一個對象;getMany(start,n)用于從數據庫的start條記錄處開始獲取n條記錄;getMany(CriteriaBox)則會根據開發者定義好的CriteriaBox對象作為限制參數從數據庫獲取符合要求的id。
對象關系映射的一個重要問題是對象的每個屬性必須能夠保持特定的數據類型,而不能都是字符串類。為了處理這個問題,可對每種數據庫對應的類型,都定義一個類來處理,在定義數據類的時候,每個成員都要定義成一個數據類型對象。
要應用這套框架,需要掌握Python語言的基本語法。在本框架中,數據已經基本交給ORM來進行處理。ORM的好處是只需花費開發者較少的時間就能對數據對象進行基本操作,從而把注意力集中在對數據本身的操作,而不需要理會數據查詢細節。視圖的產生邏輯也比較簡單,主要頁面都已經讓模板系統來處理,減輕了開發人員的負擔。
2.2 Controller子系統
Controller負責在應用程序中處理用戶交互的部分。控制器接受用戶輸入,確定調用哪個模型構件去處理請求,然后再確定用哪個視圖來顯示返回的數據。
Controller子系統包含兩方面的設計,一是http請求處理部分,二是把請求的路徑映射到對應的指定View。
Controller首先是一個基于能夠正確處理http請求的Web server,Web server接受到請求以后,會根據相應的請求路徑在urls列表里面查找相應的view函數,然后把請求的內容交由view來處理,最后把view函數返回的內容返回給客戶端。
為了處理URL請求,正確匹配要使用的View視圖,最直接的辦法是建立一個從url到View的映射表。但是由于在Web開發中,url的個數往往非常多,所以僅僅使用全字符串來定義映射,會相當麻煩。不過由于url的目錄層次結構,很容易找到相同點,并且相同的目錄,往往是同一個View來處理。所以需要規則來指定映射關系的方式,規則可以是正則表達式或者是完全匹配的url路徑。比如”^/custom_url/[0-9]*.do:custom_view”這個映射表定義了讓custom_url下的任意數字+”.do”的頁面的請求,都交由custom_view這個View處理。
2.3 View子系統
View負責應用程序中處理數據顯示部分。用戶界面是依據模型數據創建的由HTML(HyperText Markup language,超文本標記語言)元素組成的視圖,包括Adobe Flash和XHTML,XML/XSL,WML等一些標識語言和Web services。
View子系統被設計成一個單獨的模塊,并且默認包含了Model的所有定義。在View中可以訪問所有的Model對象。每個單獨的View被設計成簡潔的一個Python函數,只需要返回要產生的頁面內容即可。對于需要使用模板產生頁面的View,可采用Python中decorator的辦法,decorator是一個修飾函數,這個修飾函數包含上下文定義以及處理模板文件的相關功能,能方便地根據開發者指定的模板文件以及當前的上下文來返回模板引擎產生的內容。開發人員只需要在view函數返回幾個需要處理的變量,用于構造上下文,在view函數之前,聲明要使用這個decorator并指定模板文件的名字即可。
2.4 數據管理后臺
后臺數據庫管理起到輔助作用,幫助開發人員方便地完成增加,修改和刪除對象的操作,在一定程度上加快了開發。從后臺功能來看,無非都是對數據庫內模型對象的幾個基本操作—增加、刪除、修改。很容易便能想到直接利用現有的模型對象的基本方法來操作。因此,自動化后臺要做的主要工作,就是遍歷開發者的模型定義文件,得到所有的模型對象,然后在Web上面展現這些模型對應的操作方法,以及現有數據的瀏覽等。后臺需要運行在Web環境下面,以一個命令行的格式實現,主要輸入”./frameworkshell runadmin”即可通過8001端口訪問這個后臺。實現的方式是在開發人員定義的Model里面遍歷所有對象,看其是否有需要后臺的標志位。如果需要,就按照它們的屬性來生成相應表單。其中基本的增加、修改、刪除幾個操作,只要調用對象本身已定義的方法即可。
2.5 命令行接口
命令行接口的實現比較直觀,事先盡量定義好所有的操作,然后對每個操作進行一些實際任務的實現。開發環境提供了一個系統級命令”frameworkshell”,開發者使用這個shell可以創建項目,語法是”./frameworkshell startproject projectname”,生成一個項目文件的目錄,里面包含Model類定義文件、URL映射關系定制文件、網站配置文件、視圖定義文件、管理當前網站的腳本等多個重要文件。
啟動一個Web項目需要一些初始文件,例如Model定義文件、View定義文件、Controller配置文件,以及少數幾個額外的配置文件用于指定數據庫類型、網站主機地址、端口、路徑等。為此,可以在框架中集成一個命令行的界面來支持這個操作,命令行盡可能簡潔。例如”./webframework startproject projectname”命令能讓系統自動在當前目錄生成proojectname目錄和基本的文件,用戶可以從直接使用目錄下的幾個文件開始自己的項目。
應用MVC進行Web系統的開發是一個數據庫驅動的開發過程,步驟如下:
3.1 創建系統項目
創建系統項目直接使用下面的命令行:

3.2 設置數據庫和網站

上面設置了使用sqlite3作為sql引擎。
3.3 創建兩個對象

上面定義了兩個類,然后使用框架提供的管理工具來根據這兩個定義創建數據表:
Python manage.py syncdb
接著即可以在數據庫里面看到表了。
3.4 創建View
創建一個用戶的view,修改view.py

在上面的render_from_template()這個decorator中,指定了從add_person_result模板產生頁面,而這個模板的內容如下:

3.5 定義url映射
修改urls.py

3.6 運行web服務
同樣,使用框架提供的manage.py來運行服務:Python manage.py runserver
3.7 結果測試
直接打開sqlite3數據庫testdatabase,可以看到用戶表已經添加了一個新用戶,順利完成操作。
4.1 在ORM對象中使用鍵下標方式訪問屬性
Python語言提供了__setattr__(key,value)和__getattr__(key)兩個方法,能夠輕松的用鍵值來對屬性的設置和取值進行處理。
4.2 外鍵關系的解決
根據外鍵關系,數據表之間形成了一對多或者從屬的關系。在數據庫對象映射中,可以給對象定義has_many和belongs_to兩個表,通過設置這兩個表,讓程序根據這兩個表來建立一對多和從屬的關系。
4.3 多種數據庫不兼容的問題
對于多種數據庫,主要不同體現在一些SQL語句,以及SQL功能上。所以在可替換底層數據庫這方面考慮,設計一種封裝SQL語句和數據庫操作的方法,例如使用一個DB類來封裝基本的數據庫操作。對SQL語句兼容方面的解決方案也不只一個,例如對SQL語言進行封裝,使用的時候解析;或只取SQL各種數據庫的交集部分;又或使用一個最通用的語法,遇到不支持該語句格式的數據庫時,在該數據庫內部進行相應轉換。
當Web瀏覽器向系統發送一個http請求時,MVC框架將使用其url路徑選擇引擎,將請求映射到控制器上的method,控制器根據不同的請求來調用不同的業務邏輯處理程序,負責處理進來的請求、處理用戶輸入和交互、執行基于這些輸入和交互的應用邏輯、獲取或更新數據庫中的數據等。通過區分視圖和業務邏輯,使得開發過程更加清晰明了。
應用快速開發框架進行Web信息系統的開發,工作效率比傳統的Web開發有較大提高。Web開發被抽象為MVC模式,開發人員所要做的,是在業務規則之下進行最根本的數據模型操作。同時,系統的表示層被單獨剝離出來實現,從開發和維護的角度來說,都比傳統開發模式更具條理性和可維護性。
[1] 趙增敏,吳潔,唐惠康.基于Code First模式的ASP.NETMVC應用開發[J].制造業自動化,2012,34(6):154-156.
ZHAO Zengmin,WU Jie,TANG Huikang.ASP.NET MVC application development based on code firstmodel[J].Manufacturing Automation,2012,34(6):154-156.
[2] 聶新明,文元美,劉桂雄.LED燈具布局平臺中MVC設計模式的研究與實現[J].現代制造工程,2012(9):135-138.
Nie Xinming,WenYuanmei,Liu Guixiong.Research and implement of the MVCmode in LED lamps’layout platform[J].Modern Manufacturing Engineering,2012(9):135-138.
[3] 許暢,楊燕,王帥.一種基于MVC模式的Portlet開發框架的設計與實現[J].計算機科學,2012,39(7):119-122.
XU Chang,YANG Yan,WANG Shuai.Design and Implementation of an MVC-based Framework for Developing Portlet[J].Computer Science,2012,39(7)119-122.
[4] 劉江平,倪小剛,李艷.基于MVC模式的ERP資源管理系統[J].內蒙古農業大學學報,2013(2):170-172.
LIU Jiangping,NI Xiaogang,LI Yan.The ERP Management System base on MVC Pattern[J].Journal of Inner
Mongolia Agricultural University,2013(2):170-172.
[5] 周文紅.基于ASP.NET MVC框架的Web應用開發[J].計算機與現代化,2013(10):197-199.
ZHOUWenhong.Development ofWeb Application Based on ASP.NETMVC Framework[J].Computer and Modernization,2013(10):197-199.
Design of Rapid Development Framework ofWeb System Based on MVC Model
Rao Hao
(Department of Information Management,Shaoguan University,Shaoguan 512005,China)
The rapid development framework of web information system based on Model,View and Controller(MVC)model is discussed and analyzed in this paper.The object relation mapping,wrapper APIand URL mapping table are introduced.The system,regarded as MVC structure,through the basic datamodel operation,is implemented separately in functions.As its shorter development cycle and higher efficiency development process,in development and maintenance,it hasmore advantages than the traditional one.
MVCModel;Information System;Object Relational Mapping
10.3969/j.issn.1002-2279.2015.03.019
TP311;C931
A
1002-2279(2015)03-0069-04
2013年教育部人文社會科學研究項目(13YJCZH144)
饒浩(1976-),男,廣東興寧人,副教授,碩士,主研方向:信息管理與信息系統。
2014-11-07