模型-視圖-控制器模型
MVC不僅是一種實(shí)現(xiàn)用戶界面的軟件模式饵较,同時(shí)也是一種易于修改和維護(hù)的架構(gòu)竹观。MVC模式將應(yīng)用程序分為3個(gè)基本部分:模型镐捧、視圖和控制器。這3個(gè)部分使相互關(guān)聯(lián)的臭增,并且有助于將信息的處理與信息的呈現(xiàn)分離開來懂酱。
MVC模式的工作機(jī)制為:模型提供數(shù)據(jù)和業(yè)務(wù)邏輯,視圖負(fù)責(zé)數(shù)據(jù)的展示誊抛,而控制器是兩者之間的粘合劑列牺,根據(jù)用戶要求的呈現(xiàn)方式來協(xié)調(diào)模型和視圖。有趣的是拗窃,視圖和控制器依賴于模型瞎领,而不是反過來泌辫。這主要是因?yàn)橛脩羲P(guān)心的是數(shù)據(jù)。模型是可以獨(dú)立工作的九默,這是MVC模式的關(guān)鍵所在震放。
MVC模式的主要意圖如下:
1、將數(shù)據(jù)和數(shù)據(jù)的展示隔離開來
2驼修、使類的維護(hù)和實(shí)現(xiàn)更加簡單
3殿遂、靈活地改變數(shù)據(jù)的存儲和顯示方式。兩者都是獨(dú)立的乙各,因此可以靈活修改墨礁。
模型
模型是應(yīng)用程序的基石,因?yàn)樗仟?dú)立于視圖和控制器觅丰,而視圖和控制器則依賴于模型
模型還提供客戶端請求的數(shù)據(jù)。通常妨退,在應(yīng)用程序中妇萄,模型有存儲和返回信息的數(shù)據(jù)庫來表示。模型會提供狀態(tài)以及改變狀態(tài)的方法咬荷,但他不知道數(shù)據(jù)是如何展示給客戶端的冠句。
模型必須在多個(gè)操作中保持一致;否則幸乒,客戶端可能會損壞或展示過時(shí)的數(shù)據(jù)懦底,這是無法容忍的。
由于模型是完全獨(dú)立的罕扎,所以聚唐,開發(fā)模型的人員可以專注于維護(hù)模型的本身,而無需關(guān)注視圖的最新變化
視圖
視圖用來將數(shù)據(jù)展示在接口上腔召,供客戶查看杆查。視圖可以獨(dú)立開發(fā),但不應(yīng)該包含任何負(fù)責(zé)的邏輯臀蛛,因?yàn)檫壿嫅?yīng)該放在控制器或模型中憎夷。
在當(dāng)今世界中别瞭,視圖需要足夠的靈活,并且應(yīng)該適應(yīng)多種平臺。
視圖應(yīng)避免與數(shù)據(jù)庫直接交互饮焦,而是依靠模型來獲取所需的數(shù)據(jù)
控制器
控制器,顧名思義遍膜,就是控制用戶在界面上的交互。當(dāng)用戶點(diǎn)擊界面上的某些元素時(shí)鼠锈,基于對應(yīng)的交互,控制器調(diào)用相應(yīng)的模型茎刚,然后模型完成創(chuàng)建、更新或刪除數(shù)據(jù)等動作筝闹。
控制器還能將數(shù)據(jù)傳遞給視圖,以便將信息呈現(xiàn)在接口上界睁,供用戶查看嘹履。
控制器不應(yīng)該進(jìn)行數(shù)據(jù)庫調(diào)用或參與數(shù)據(jù)的展示幼苛』拦危控制器應(yīng)該作為模型和視圖之間的粘合劑舶沿。
下面用Python實(shí)現(xiàn)一個(gè)MVC設(shè)計(jì)模式。假設(shè)我們相要開發(fā)一個(gè)應(yīng)用程序配并,告訴用戶云公司所提供的營銷服務(wù)括荡,包括的電子郵件、短信和語音設(shè)施溉旋。
我們首先開發(fā)model類(模型)畸冲,定義產(chǎn)品提供的服務(wù)和費(fèi)用;
然后定義view類(視圖)观腊,它提供了將信息反饋給客戶端的方法邑闲;
接下來,定義Controller類恕沫,這個(gè)類定義了兩個(gè)方法监憎,即get_services()和get_pricing()纱意。這兩個(gè)方法都是用來查詢模型并獲取數(shù)據(jù)的婶溯,然后將數(shù)據(jù)饋送到視圖,從而展示給用戶偷霉;
Client類將實(shí)例化控制器迄委,然后控制器對象就會根據(jù)客戶端的請求來調(diào)用適當(dāng)?shù)姆椒ǎ?br>
————————————————
版權(quán)聲明:本文為CSDN博主「shizhengju」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議类少,轉(zhuǎn)載請附上原文出處鏈接及本聲明叙身。
原文鏈接:https://blog.csdn.net/aafeiyang/article/details/105819330
class Model(object):
services = {
'email': {'number': 1000, 'price': 2},
'sms': {'number': 1000, 'price': 10},
'voice': {'number': 1000, 'price': 15},
}
class View(object):
def list_services(self, services):
for svc in services:
print(svc, " ")
def list_pricing(self, services):
for svc in services:
print("For", Model.services[svc]['number'],
svc, "message you pay $",
Model.services[svc]['price'])
class Controller(object):
def __init__(self):
self.model = Model()
self.view = View()
def get_services(self):
services = self.model.services.keys()
return self.view.list_services(services)
def get_pricing(self):
services = self.model.services.keys()
return self.view.list_pricing(services)
class Client(object):
con = Controller()
print("Services Provided:")
con.get_services()
print("Pricing for Services:")
con.get_pricing()