一.简单介绍web
mvc模式 the model-view-controller patternsql
mvc模式是一个运用在软件工程中的设计模式。mvc模式脱离了之前简单的web服务设计逻辑,将开发,测试和维护分离。在MVC模式中,应用被分解为相互做用的模块,模型,视图,控制。目的在于分离输入(control),处理逻辑(model),输出格式(view)。数据库
简单的理解:设计模式
具体细节:mvc
控制模块:能够被看做是一个介于用户,处理(model),显示(view)之间的中间人。它是用户请求的入口,也是应用处理的入口。控制模块接受用户输入,解析,决定哪个model和view参与处理,所以,它决定了针对用户请求,选择何种view和model。app
模型模块:处理业务的应用程序,model操做数据库,好比插入,更新,删除。每一个模型会提供固定类型的数据给控制模块,另外一方面,控制模块能够调用模型的不一样方法处理数据,并将处理后的结果返回给视图模型ide
视图模块:主要用来显示,经过控制模块获取模型模块处理后的数据,并进行格式化的显示。经过控制模块选择view并显示反馈给用户。view模型的选择是基于模型模块的l选择和用户配置等等。测试
二.简单的例子spa
测试管理系统用来查询错误列表设计
情景描述:
建立SQLite 数据库,库名TMS,并建立一个表
ID | Component | Summary |
1 | XYZ | File doesn't get deleted |
2 | XYZ | Registry doesn't get created |
3 | ABC | Wrong title gets displayed |
代码以下:
1 #mvc.py 2 import sqlite4 3 import types 4 5 class DefectModel: 6 def getDefectList(self, component): 7 query = "select ID from defects where Component= '%s' " % component 8 defectlist = self._dbselect(query) 9 list = [] 10 for row in defectlist: 11 list.append(row[0]) 12 13 return list 14 15 def getSummary(self, id): 16 query = "select summary from defects where ID='%d'" % id 17 summary = self._dbselect(query) 18 for row in summary: 19 return row[0] 20 21 def _dbselect(self, query): 22 connection = sqlite3.connect('TMS') 23 cursorObj = connection.cursor() 24 results = cursorObj.execute(query) 25 connection.commit() 26 cursorObj.close() 27 return results 28 29 30 31 class DefectView: 32 def summary(self, summary, defectid): 33 print "#### Defect Summary for defect# %d####%s\n" %(defectid, summary) 34 35 def defectList(self, list, category): 36 print "#### Defect List for %s ####\n" % category 37 for defect in list: 38 print defect 39 40 class Controller: 41 def __init__(self): 42 pass 43 44 def getDefectSummary(self, defectid): 45 model = DefectModel() 46 view = DefectView() 47 summary_data = model.getSummary(defectid) 48 return view.summary(summary_data, defectid) 49 50 def getDefectList(self, component): 51 model = DefectModel() 52 view = DefectView() 53 defectlist_data = model.getDefectList(component) 54 return view.defectList(defectlist_data, component)
使用模块:
import mvc controller = mvc.Controller() print controller.getDefectSummary(2) print controller.getDefectList('ABC')
总结:经过此mvc设计方法,看到了解耦的好处,个个模块独立,相互不影响,也能够增长模块。方便组合,方便拆卸。好好体会吧!