python 設計模式之MVC模式


一.簡單介紹

mvc模式  the  model-view-controller pattern

mvc模式是一個運用在軟件工程中的設計模式。mvc模式脫離了以前簡單的web服務設計邏輯,將開發,測試和維護分離。在MVC模式中,應用被分解為相互作用的模塊,模型,視圖,控制。目的在於分離輸入(control),處理邏輯(model),輸出格式(view)。

簡單的理解:

  1. 控制模塊用於獲取用戶輸入,並將模型與視圖建立聯系
  2. 模型主要是從存儲獲取數據
  3. 視圖用於展示給用戶,從模型獲取的數據

 

 

具體細節:

  控制模塊:可以被看作是一個介於用戶,處理(model),顯示(view)之間的中間人。它是用戶請求的入口,也是應用處理的入口。控制模塊接受用戶輸入,解析,決定哪一個model和view參與處理,因此,它決定了針對用戶請求,選擇何種view和model。

  模型模塊:處理業務的應用程序,model操作數據庫,比如插入,更新,刪除。每個模型會提供固定類型的數據給控制模塊,另一方面,控制模塊可以調用模型的不同方法處理數據,並將處理后的結果返回給視圖模型

  視圖模塊:主要用來顯示,通過控制模塊獲取模型模塊處理后的數據,並進行格式化的顯示。通過控制模塊選擇view並顯示反饋給用戶。view模型的選擇是基於模型模塊的l選擇和用戶配置等等。

 

二.簡單的例子

測試管理系統用來查詢錯誤列表

 情景描述:

  •   如果用戶查詢一個特定的錯誤,測試管理系統以某種格式顯示這個錯誤的描述
  •   如果用戶搜索相關錯誤的關鍵值,測試管理系統顯示所有相關的錯誤列表

 

 創建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)
View Code

 

 使用模塊:

import mvc

controller = mvc.Controller()

print  controller.getDefectSummary(2)
print  controller.getDefectList('ABC')

 

總結:通過此mvc設計方法,看到了解耦的好處,個個模塊獨立,相互不影響,也可以增加模塊。方便組合,方便拆卸。好好體會吧!

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM