Python模型—视图—控制器——复合模式

MVC不仅是一种实现用户界面的软件模式,同时也是一种易于修改和维护的架构。MVC模式将应用程序分为3个基本部分:模型、视图和控制器。这3个部分使相互关联的,并且有助于将信息的处理与信息的呈现分离开来。

MVC模式的工作机制为:模型提供数据和业务逻辑,视图负责数据的展示,而控制器是两者之间的粘合剂,根据用户要求的呈现方式来协调模型和视图。有趣的是,视图和控制器依赖于模型,而不是反过来。这主要是因为用户所关心的是数据。模型是可以独立工作的,这是MVC模式的关键所在。

MVC模式的主要意图如下:

1、将数据和数据的展示隔离开来

2、使类的维护和实现更加简单

3、灵活地改变数据的存储和显示方式。两者都是独立的,因此可以灵活修改。

模型

模型是应用程序的基石,因为它是独立于视图和控制器,而视图和控制器则依赖于模型

模型还提供客户端请求的数据。通常,在应用程序中,模型有存储和返回信息的数据库来表示。模型会提供状态以及改变状态的方法,但他不知道数据是如何展示给客户端的。

模型必须在多个操作中保持一致;否则,客户端可能会损坏或展示过时的数据,这是无法容忍的。

由于模型是完全独立的,所以,开发模型的人员可以专注于维护模型的本身,而无需关注视图的最新变化

视图

视图用来将数据展示在接口上,供客户查看。视图可以独立开发,但不应该包含任何负责的逻辑,因为逻辑应该放在控制器或模型中。

在当今世界中,视图需要足够的灵活,并且应该适应多种平台。

视图应避免与数据库直接交互,而是依靠模型来获取所需的数据

控制器

控制器,顾名思义,就是控制用户在界面上的交互。当用户点击界面上的某些元素时,基于对应的交互,控制器调用相应的模型,然后模型完成创建、更新或删除数据等动作。

控制器还能将数据传递给视图,以便将信息呈现在接口上,供用户查看。

控制器不应该进行数据库调用或参与数据的展示。控制器应该作为模型和视图之间的粘合剂。

 

下面用Python实现一个MVC设计模式。假设我们相要开发一个应用程序,告诉用户云公司所提供的营销服务,包括的电子邮件、短信和语音设施。

我们首先开发model类(模型),定义产品提供的服务和费用;

然后定义view类(视图),它提供了将信息反馈给客户端的方法;

接下来,定义Controller类,这个类定义了两个方法,即get_services()和get_pricing()。这两个方法都是用来查询模型并获取数据的,然后将数据馈送到视图,从而展示给用户;

Client类将实例化控制器,然后控制器对象就会根据客户端的请求来调用适当的方法:

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()

Python模型—视图—控制器——复合模式_第1张图片

我们的web应用程序框架也是基于MVC的优秀理念的,例如django都是以模型-视图-控制器格式来构造项目的,只是形式是模型、模板、视图(MTV)其中模型是数据库,模板是视图,控制器是视图/路由;所以就不在列举真实的例子了

MVC的优点

1、使用MVC,开发人员可以将软件应用程序分为3个主要部分:模型、视图和控制器。这有助于提高可维护性,强制松耦合,并降低复杂性。

2、MVC允许对前端进行独立更改,而对后端逻辑无需任何修改或只需要进行很少的更改,因此开发工作仍可以独立运行;类似的可以更改模型或业务逻辑,而无需对视图进行任何修改;可以更改控制器,而不会对视图或模型造成任何影响;

3、MVC还有助于专业的人员做专业的事情

 

 

 

 

 

 

 

你可能感兴趣的:(python设计模式)