鍍金池/ 教程/ Python/ 模型視圖控制器(MVC)模式
反模式
隊列
適配器設(shè)計模式
享元設(shè)計模式
Python設(shè)計模式
工廠模式
模板設(shè)計模式
構(gòu)建器(Builder)設(shè)計模式
Python設(shè)計模式概要
命令設(shè)計模式
Python設(shè)計模式簡介
觀察者設(shè)計模式
代理設(shè)計模式
異常處理
責(zé)任鏈設(shè)計模式
字典實現(xiàn)
抽象工廠設(shè)計模式
Python并發(fā)(多線程)
策略設(shè)計模式
門面(Facade)設(shè)計模式
原型設(shè)計模式
迭代器設(shè)計模式
集合
單例模式
列表數(shù)據(jù)結(jié)構(gòu)
狀態(tài)設(shè)計模式
模型視圖控制器(MVC)模式
裝飾器設(shè)計模式
面向?qū)ο蟾拍畹膶崿F(xiàn)
面向?qū)ο笤O(shè)計模式
字符串和序列化

模型視圖控制器(MVC)模式

模型視圖控制器(MVC)是最常用的設(shè)計模式。 開發(fā)人員發(fā)現(xiàn)很容易實現(xiàn)這種設(shè)計模式。

以下是模型視圖控制器(MVC)的基本架構(gòu) -

現(xiàn)在讓我們看看這個模式結(jié)構(gòu)是如何工作的。

模型(Model)

它由純粹的應(yīng)用程序邏輯組成,它與數(shù)據(jù)庫交互。它包含了向最終用戶呈現(xiàn)數(shù)據(jù)的所有信息。

視圖(View)

視圖代表與最終用戶交互的HTML文件。它代表了用戶的模型數(shù)據(jù)。

控制器(Controller)

它充當(dāng)視圖和模型之間的中介。它偵聽由視圖(View)和查詢模型觸發(fā)的事件。

Python代碼

下面通過一個名為“Person”的基本對象并創(chuàng)建一個MVC設(shè)計模式。

文件:Model.py -

import json

class Person(object):
   def __init__(self, first_name = None, last_name = None):
      self.first_name = first_name
      self.last_name = last_name
   #returns Person name, ex: John Doe
   def name(self):
      return ("%s %s" % (self.first_name,self.last_name))

   @classmethod
   #returns all people inside db.txt as list of Person objects
   def getAll(self):
      database = open('db.txt', 'r')
      result = []
      json_list = json.loads(database.read())
      for item in json_list:
         item = json.loads(item)
         person = Person(item['first_name'], item['last_name'])
         result.append(person)
      return result

它需要一個方法來獲取數(shù)據(jù)庫中Person表的所有記錄。記錄以JSON格式顯示。

視圖

它顯示模型中獲取的所有記錄。視圖從不與模型交互; 由控制器完成這項工作(與模型和視圖進行通信)。

from model import Person
def showAllView(list):
   print 'In our db we have %i users. Here they are:' % len(list)
   for item in list:
      print item.name()
def startView():
   print 'MVC - the simplest example'
   print 'Do you want to see everyone in my db?[y/n]'
def endView():
   print 'Goodbye!'

控制器

控制器通過getAll()方法與模型交互,getAll()方法獲取顯示給最終用戶的所有記錄。

from model import Person
import view

def showAll():
   #gets list of all Person objects
   people_in_db = Person.getAll()
   #calls view
   return view.showAllView(people_in_db)

def start():
   view.startView()
   input = raw_input()
   if input == 'y':
      return showAll()
   else:
      return view.endView()

if __name__ == "__main__":
   #running controller function
   start()