MVC框架理解

作者: AngerCow | 来源:发表于2017-12-14 11:20 被阅读0次

    我们先来看看什么是MVC?
    全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。

    MVC 编程模式

    MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式:

    • Model(模型)表示应用程序核心(比如数据库记录列表)。
    • View(视图)显示数据(数据库记录)。
    • Controller(控制器)处理输入(写入数据库记录)。
      MVC 模式同时提供了对 HTML、CSS 和 JavaScript 的完全控制。
      Model(模型)是应用程序中用于处理应用程序数据逻辑的部分。
        通常模型对象负责在数据库中存取数据。
      View(视图)是应用程序中处理数据显示的部分。
        通常视图是依据模型数据创建的。
      Controller(控制器)是应用程序中处理用户交互的部分。
        通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。
      MVC 分层有助于管理复杂的应用程序,因为您可以在一个时间内专门关注一个方面。例如,您可以在不依赖业务逻辑的情况下专注于视图设计。同时也让应用程序的测试更加容易。
      MVC 分层同时也简化了分组开发。不同的开发人员可同时开发视图、控制器逻辑和业务逻辑。
      框架主要包含三个内容:
      视图(View)
      视图是用户看到并与之交互的界面。
      模型(Model)
      模型表示企业数据和业务规则。
      控制器(Controller)
      控制器接受用户的输入并调用模型和视图去完成用户的需求。
      image.png
      **控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求,然后再确定用哪个视图来显示返回的数据。
      引自[百度百科]
      我们从结构图可以看出,整个框架形成了一个闭环,这也符合设计模式的开放-封闭原则。那我要区分框架与设计模式有什么区别。
      基本上,每一个模块只要与上一个模块通讯,不需要知道上个模块跟其它模块的关系。这样可以分离出单个模块,在开发中,这对团队分工与细分工作有很大的好处。
      **一个框架里可能有多个设计模式,但是一个设计模式不能统称为框架。设计模式是设计上的复用,框架是代码的复用。设计模式是比框架更抽象的,框架可以用代码表示,可以直接执行与复用,设计模式只有实例可以复用执行。
      如果是小型项目,引入mvc可能会增加项目周期,mvc前期设计与搭建比较费时费力,这是需要需要精心的计划的。
      理解好mvc,做为程序进阶的一步重要步骤,没有好理想的程序员不是好美术。
      这是顺便说下MVP,MVVM模式。可以加深mvc理解。
      转自这里

    MVP

    MVP 模式将 Controller 改名为 Presenter,同时改变了通信方向。

    [图片上传失败...(image-90cd76-1513221593103)]

    1. 各部分之间的通信,都是双向的。

    2. View 与 Model 不发生联系,都通过 Presenter 传递。

    3. View 非常薄,不部署任何业务逻辑,称为"被动视图"(Passive View),即没有任何主动性,而 Presenter非常厚,所有逻辑都部署在那里。

    MVVM

    MVVM 模式将 Presenter 改名为 ViewModel,基本上与 MVP 模式完全一致。

    [图片上传中...(image-95c34f-1513221593103-0)]

    唯一的区别是,它采用双向绑定(data-binding):View的变动,自动反映在 ViewModel,反之亦然。Angular

    Ember

    都采用这种模式。

    相关文章

      网友评论

        本文标题:MVC框架理解

        本文链接:https://www.haomeiwen.com/subject/xnihwxtx.html