• MVC简介


    1什么是MVC

    2为什么要使用MVC
    3怎么来使用MVC
    4MVC的缺点

    1什么是MVC

    MVC模式是“Model-View-Controller”的缩写,中文翻译为“模型-视图-控制器”。
    MVC模式将一个交互式应用程序分成3个组件
    模型:业务逻辑层,包含核心功能和数据 并实现核心业务逻辑
    视图:表示层,向用户显示信息
    控制器:控制层,处理用户输入,并实现View层跟Model层的协同工作

    为什么使用MVC
    具有灵活人-机界面的交互式应用程序
    可以灵活选择不同的信息显示方式
    可以灵活选择用户的输入方式
    针对不同的用户角色,提供不同的用户界面
    不同用户具有不同权限,操作的方式也有所不同

    模型

    业务逻辑层,封装了业务逻辑和数据
    业务逻辑(软件的核心)
    数据以及访问它们的函数(视图组件使用)
    执行特定应用程序处理的过程(控制器代表用户调用)
    模型对于用户来说是不可见的(M与V独立)
    模型独立于特定输出表示或者输入方式(M与C独立)
    用户只能通过控制器操作模型(C是M与V之间的桥梁)

    视图View

    表示层。就是用户看到并与之交互的界面,通常实现数据的输入和输出功能。
    向用户显示信息
    不同的视图使用不同的方法呈现信息
    每个视图组件都有一个更新函数,这个函数被模型变更通知激活
    这个函数被激活(此时模型已经改变)后,将使得视图重新和模型一致
    在初始化阶段,视图向模型登记请求变更通知(表)
    从模型获得数据
    通过状态查询函数实现
    例如:定时刷新
    控制Control

    控制层。起到控制整个业务流程的作用,实现View层跟Model层的协同工作。
    每个视图有一个相关的控制器组件(一一对应)
    控制器组件接受事件,并翻译成输入
    事件如何发送到控制器由用户界面平台决定
    事件被翻译成为对模型或者视图的请求
    如果控制器的行为依赖于模型的状态,那么控制器也需要向模型登记请求变更通知
    例如:用户点击按钮,按钮的事件响应函数将采取相应的措施处理用户要求
    用户仅仅通过控制器与系统交互

    变更-传播机制

    一个模型可对应多个视图
    如果用户通过一个视图的控制器改变了模型中的数据,那么依赖于该数据的其他视图也应该反映出这样的变化
    一旦模型的数据发生了变化,模型需要通知所有相关的视图做出相应的变化
    维护数据的一致性
    这样的方式可以通过观察者(Observer)设计模式完成

    怎样使用MVC

    视图与控制器是一一对应的关系

    模型与视图是一对多的关系

    变更-传播机制保持模型与视图、控制器之间状态的一致性

    MVC的优点

    将视图展示和应用逻辑清晰的分离开来,降低了模型和视图之间的耦合性,使得系统设计时具有更高的灵活性。
    首先,最重要的是应该有多个视图对应一个模型的能力。在目前用户需求的快速变化下,可能有多种方式访问应用的要求。例如,订单模型可能有本系统的订单,也有网上订单,或者其他系统的订单,但对于订单的处理都是一样,也就是说订单的处理是一致的。按MVC设计模式,一个订单模型以及多个视图即可解决问题。这样减少了代码的复制,即减少了代码的维护量,一旦模型发生改变,也易于维护。 其次,由于模型返回的数据不带任何显示格式,因而这些模型也可直接应用于接口的使用。

    MVC的优点

    再次,由于一个应用被分离为三层,因此有时改变其中的一层就能满足应用的改变。一个应用的业务流程或者业务规则的改变只需改动MVC的模型层。
    控制层的概念也很有效,由于它把不同的模型和不同的视图组合在一起完成不同的请求,因此,控制层可以说是包含了用户请求权限的概念。

    最后,它还有利于软件工程化管理。由于不同的层各司其职,每一层不同的应用具有某些相同的特征,有利于通过工程化、工具化产生管理程序代码。

    MVC的不足体现在以下几个方面:

    (1)增加了系统结构和实现的复杂性。对于简单的界面,严格遵循MVC,使模型、视图与控制器分离,会增加结构的复杂性,并可能产生过多的更新操作,降低运行效率。
    (2)视图与控制器间的过于紧密的连接。视图与控制器是相互分离,但确实联系紧密的部件,视图没有控制器的存在,其应用是很有限的,反之亦然,这样就妨碍了他们的独立重用。
    (3)视图对模型数据的低效率访问。依据模型操作接口的不同,视图可能需要多次调用才能获得足够的显示数据。对未变化数据的不必要的频繁访问,也将损害操作性能。

  • 相关阅读:
    Devrama Slider
    全栈开发必备的10款 Sublime Text 插件
    经典网页设计:使用颜色滤镜效果的20个网站
    Nibbler – 免费的网站测试和指标评分工具
    使用 HTML5 Canvas 绘制出惊艳的水滴效果
    Qt4 和 Qt5 模块的分类
    设计Qt风格的C++API
    Qt属性系统
    Qt实现艺术字效果
    Qt中容器类应该如何存储对象(最好使用对象指针类型,如:QList<TestObj*>,而不要使用 QList<TestObj> 这样的定义,建议采用 智能指针QSharedPointer)
  • 原文地址:https://www.cnblogs.com/finalstar/p/2163239.html
Copyright © 2020-2023  润新知