一.簡單介紹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設計方法,看到了解耦的好處,個個模塊獨立,相互不影響,也能夠增長模塊。方便組合,方便拆卸。好好體會吧!