MVC设计模式(Python)
工作原理
MVC模式的工作机制为:
- 模型提供数据和业务逻辑(如何存储和查询信息),
- 视图负责数据的展示(如何呈现),
- 而控制器是两者之间的粘合剂,根据用户要求的呈现方式来协调模型和视图。
有趣的是,视图和控制器依赖于模型,而不是反过来。这主要是因为用户所关心的是数据。模型是可以独立工作的,这是MVC模式的关键所在。
MVC设计模式使用以下术语——模型、视图、控制器和客户端。
- 模型:声明一个存储和操作数据的类。
- 视图:声明一个类来构建用户界面和显示数据。
- 控制器:声明一个连接模型和视图的类。
- 客户端:声明一个类,根据某些操作来获得某些结果。
简而言之,MVC模式的主要意图如下。
- 将数据和数据的展示隔离开来。
- 使类的维护和实现更加简单。
- 灵活地改变数据的存储和显示方式。
两者都是独立的,因此可以灵活修改。
应用
我们想要开发一个应用程序,告诉用户云公司所提供的营销服务,包括电子邮件、短信和语音设施。
我们首先要开发model类(模型),定义产品提供的服务,即电子邮件、短信和语音。这里的每种服务都有特定的费率,例如每1000封电子邮件将向客户收取2美元,而每1000条短信,费用为10美元,同时每1000条语音留言的费用为15美元。因此,模型提供与产品服务和价格相关的数据。
然后,我们来定义view类(视图),它提供了将信息反馈给客户端的方法。这些方法是list_services()
和list_ pricing()
,从方法名称不难看出,一个是用于打印产品提供的服务,另一个是用来列出服务的定价。
接下来,我们开始定义Controller类,这个类定义了两个方法,即get_services()和get_pricing()。这两个方法都是用来查询模型并获取数据的,然后将数据馈送到视图,从而展示给用户。
class Model:
services = {
'email':{'number': 1000, 'price': 2},
'sms':{'number':1000, 'price':10},
'voice':{'number':1000, 'price': 20},
'short-video':{'number':1000, 'price': 60}
}
class View:
def list_services(self, services):
for svc in services:
print(svc, ' ')
def list_pricing(self, services):
for svc in services:
print("For {} {} message, you may pay {}.".format(Model.services[svc]['number'],
svc,
Model.services[svc]['price']))
class Controller:
def __init__(self):
self.view = View()
self.model = Model()
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:
controller = Controller()
print("Serices Proviced")
controller.get_services()
print("Prices")
controller.get_pricing()
client = Client()
Serices Proviced
email
sms
voice
short-video
Prices
For 1000 email message, you may pay 2.
For 1000 sms message, you may pay 10.
For 1000 voice message, you may pay 20.
For 1000 short-video message, you may pay 60.