放肆青春的博客
首页
前端
算法
网络
面试
技术
后端
运维
杂项
数据库
工具
网址
电脑
个人
文章
  • 分类
  • 标签
  • 归档
github (opens new window)
gitee (opens new window)

放肆青春

一个前端菜鸟的技术成长之路
首页
前端
算法
网络
面试
技术
后端
运维
杂项
数据库
工具
网址
电脑
个人
文章
  • 分类
  • 标签
  • 归档
github (opens new window)
gitee (opens new window)
  • 前端

    • 前端 概览
    • 前端汇总

    • front 博文

      • 移动端兼容
      • 架构模式MV*
        • 架构模式
          • MVC
          • MVP
          • MVVM
      • 前端动画
      • ajax
      • package
      • web实时通信方案
      • H5直播
      • H5可视化
      • 跨页面通信方案
      • Service Worker
      • web worker
      • 复合图层和渲染图层
      • 虚拟列表
    • front 项目总结

    • front 高级

    • front tools

  • vue

    • vue 概览
    • vue 汇总

    • vue 博文

    • vue 项目总结

    • vue 高级

  • html

    • html 概览
    • html 汇总

    • html 博文

  • css

    • css 概览
    • css 汇总

    • css 博文

    • sass

    • less

  • js

    • javascript 概览
    • JS 汇总

    • ES6

    • JS 博文

    • JS 工具

  • node

    • node 概览
    • node 汇总

    • node 框架

    • node 博文

  • react

    • react 概览
    • react 汇总

    • react 博文

    • react 高级

  • 微信小程序

    • 微信小程序 概览
    • 微信小程序总结
    • 微信小程序文章
    • 微信小程序 博文

    • 微信小程序 高级

  • 微信公众号

    • 微信公众号 概览
    • 微信公众号总结
    • 微信公众号文章
  • 多端开发

    • 多端开发
    • dsbridge 概览
    • jsbridge 概览
    • webview
    • uniapp

      • uniapp 概览
    • taro

      • taro 概览
    • flutter

      • flutter 概览
      • flutter 环境搭建
    • electron

      • electron 概览
  • front
放肆青春
2021-04-19

架构模式MV*

# 架构模式

三个非常重要的架构模式:

  1. MVC (Model(模型)-View(视图)-Controller(控制器))

  2. MVP (Model(模型)-View(视图)-Presenter(中介者))

  3. MVVM (Model(模型)-View(视图)-ViewModel(视图模型))

# MVC

MVC从实现上来说,主要可以分为后端MVC和前端MVC两种。

image

可以看到,前端的MVC其实是为了解决前端复杂JS模块化的问题,从后端MVC的V分出来的MVC,与后端MVC并没有直接的关系。前端的MVC中,M占的比例很低,只指代数据。而后端V的比例很低,只有模版的部分。

  1. 视图(View):用户界面。用于处理数据显示的部分,注册并接收Model的数据更新视图,通常视图是依据模型数据创建的;

  2. 控制器(Controller):控制器、用于连接模型和视图控制应用程序的流程(事件绑定等),通常控制器负责响应View的事件(路由,键盘,鼠标等),调用Model的接口进行操作;

  3. 模型(Model):业务模型、用于管理应用程序数据处理逻辑的部分,通过观察者模式(Pub&Sub / Events)发送消息给View;

流程:

  1. View 传送指令到 Controller

  2. Controller 完成业务逻辑后,要求 Model 改变状态

  3. Model 将新的数据发送到 View,用户得到反馈

流程图:

image

实例:Backbone.js

# MVP

模型-视图-展示器(MVP)是 MVC 设计模式的一个衍生模式,它专注于提升展现逻辑。

流程图:

image

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

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

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

Presenter:MVP 中的 P 代表展示器。它是一个包含视图的用户界面逻辑的组件。不像 MVC,来自视图的调用被委派给了控制器,它是从视图中解耦出来的,并且转而通过一个接口来同它进行对话。

在 MVP 中,P 观察着模型并且当模型发生改变的时候对视图进行更新(被动视图)。P 切实的将模型绑定到了视图,这一责任在 MVC 中被控制器提前持有了。

优点:

  1. 增强应用的可测试性:Presenter对View是通过接口进行,在对Presenter进行不依赖UI环境的单元测试的时候。可以通过Mock一个View对象,这个对象只需要实现了View的接口即可

  2. 更加干净的隔离视图和模型

缺点:Presenter中除了业务逻辑以外,还有大量的View->Model,Model->View的手动同步逻辑,造成Presenter比较笨重,维护起来会比较困难。

# MVP和MVC区别

  1. MVP中View和Model完全解耦,它们之间的通信是通过Presenter (MVC中的Controller)来进行的,所有的交互都发生在Presenter内部;

# MVVM

MVVM(Model View ViewModel)是一种基于 MVC 和 MVP 的架构模式,它试图将用户界面(UI)从业务逻辑和行为中更加清晰地分离出来。

  1. Model(业务模型): 用于管理应用程序数据;

  2. View(视图界面): 通过使用模板语法来声明式的将数据渲染进DOM;

  3. ViewModel(视图模型): 包含了领域模型(Domain Model)和视图的状态(State),核心就是双向绑定技术

流程图:

image

优点:

  1. 双向绑定(data-binding):View的变动,自动反映在 ViewModel,反之亦然;

  2. 解放MVP大量手动同步状态的问题,提高了代码的可维护性;

  3. 简化测试,Model正确就能保证View输出;

缺点:

  1. 大型项目的绑定数据较多会提高维护成本;

  2. View里的数据绑定无法检测断点,只能从Model下手;

实例:Angular 和 Ember

更新时间: 4/21/2021, 7:23:28 PM
移动端兼容
前端动画

← 移动端兼容 前端动画→

最近更新
01
前端权限管理
02-24
02
vue2指令
02-24
03
vue2 hook
02-24
更多文章>
Theme by Vdoing | Copyright © 2019-2022 放肆青春
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式