饶 浩
(韶关学院信息管理系,韶关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