当前位置: 首页 > news >正文

MVC,MVP,MVVM

MVC模式:

MVC即Model-VIew-Controller。他是1970年代被引入到软件设计大众的。MVC模式致力于关注点的切分,这意味着model和controller的逻辑是不与用户界面(View)挂钩的。因此,维护和测试程序变得更加简单容易。

MVC设计模式将应用程序分离为3个主要的方面:Model,View和Controller

01.Model

Model代表了描述业务路逻辑,业务模型、数据操作、数据模型的一系列类的集合。这层也定义了数据修改和操作的业务规则。

02.View

View代表了UI组件,像CSS,jQuery,html等。他只负责展示从controller接收到的数据。也就是把model转化成UI。

03.Controller

Controll负责处理流入的请求。它通过View来接受用户的输入,之后利用Model来处理用户的数据,最后把结果返回给View。Controll就是View和Model之间的一个协调者。

 

今天,这个设计模式被很多热门框架所使用,比如Ruby on Rails,spring Framework,Apple iOS Development and ASP.NET MVC。

 

MVP模式:

这个模式把Presenter换成Controller就非常和MVC相像了。这个设计模式把应用程序分成了3个主要方面:Model、View和Presenter。

01.Model

Model层代表了描述业务逻辑和数据的一系列类的集合。它也定义了数据修改和操作的业务规则。

02.View

View代表了UI组件,像CSS,JQuery,html等。他只负责展示从Presenter接收到的数据。也就是把模型(译者注:非Modle层模型)转化成UI。

03.Presenter

Presenter负责处理View背后所有的UI事件。它通过View接收用户输入,之后利用Model来处理用户的数据,最后把结果返回给View。与View和Controller不同,View和Presenter之间是完全解耦的,他们通过接口来交互。另外,presenter不像controller处理进入的请求。

 

这个模式被普遍的引用于ASP.Net Web Forms 应用程序。并且也应用于windows form。

 

MVP模式关键点:

01.用户和View交互。

02.View和Presenter是一对一关系。意味着一个Presenter只映射一个View。

03.View持有Presenter的引用(译者注:应该是通过接口交互,并不直接引用Presenter),但是View不持有Model的引用(译者注:即使接口,也不会)。

04.在View和Presenter之间可以双向交互。

 

MVVM模式:

MVVM即Model-View-View Model。这个模式提供对View和View Model的双向数据绑定。这使得View Model的状态改变可以自动传递给View。典型的情况是,View Model通过使用obsever模式(观察者模式)来将View Model的变化通知给model。

01.Model

Model层代表了描述业务逻辑和数据的一系列类的集合。它也定义了数据修改和操作的业务规则。

02.View

View代表了UI组件,像CSS,JQuery,html等。他只负责展示从Presenter接收到的数据。也就是把模型转化成UI。

03.View Model

View Model负责暴漏方法,命令,其他属性来操作VIew的状态,组装model作为View动作的结果,并且触发view自己的事件。

 

这个模式被广泛应用于WPF,Silverlight,Caliburn,nRoute 等。

 

MVVM模式关键点:

 

01.用户和View交互。

02.View和ViewModel是多对一关系。意味着一个ViewModel只映射多个View。

03.View持有ViewModel的引用,但是ViewModel没有任何View的信息。

04.View 和ViewModel之间有双向数据绑定关系。

 

转载于:https://www.cnblogs.com/frontendnotes/p/6416833.html

相关文章:

  • android设备分辨率及sp、px计算
  • mysql information_schema介绍
  • js == 与 ===
  • 基于MODBUS 协议的CRC16程序实现
  • python中的logging模块的使用
  • NLPIR大数据挖掘平台新增敏感词扫描功能
  • 面试(二)
  • 第六课、窗口组件及窗口类型------------------狄泰软件学院
  • Git:常用操作
  • Xen server虚拟化中虚拟机磁盘文件丢失的处理办法
  • C语言截取字符串或反转字符串
  • 彻底搞定C指针-函数名与函数指针【转】
  • Spark上的深度学习框架再添新兵:Yahoo开源TensorFlowOnSpark
  • CSS小知识点-1
  • .net利用SQLBulkCopy进行数据库之间的大批量数据传递
  • ----------
  • @angular/forms 源码解析之双向绑定
  • egg(89)--egg之redis的发布和订阅
  • MySQL用户中的%到底包不包括localhost?
  • Otto开发初探——微服务依赖管理新利器
  • spring cloud gateway 源码解析(4)跨域问题处理
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 全栈开发——Linux
  • 深度解析利用ES6进行Promise封装总结
  • 使用docker-compose进行多节点部署
  • 使用Envoy 作Sidecar Proxy的微服务模式-4.Prometheus的指标收集
  • 使用权重正则化较少模型过拟合
  • 说说动画卡顿的解决方案
  • 突破自己的技术思维
  • 最近的计划
  • ​力扣解法汇总946-验证栈序列
  • #define、const、typedef的差别
  • #ubuntu# #git# repository git config --global --add safe.directory
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (TOJ2804)Even? Odd?
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (超详细)语音信号处理之特征提取
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (考研湖科大教书匠计算机网络)第一章概述-第五节1:计算机网络体系结构之分层思想和举例
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (南京观海微电子)——I3C协议介绍
  • (一)基于IDEA的JAVA基础10
  • (转)c++ std::pair 与 std::make
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • (转)visual stdio 书签功能介绍
  • .desktop 桌面快捷_Linux桌面环境那么多,这几款优秀的任你选
  • .helper勒索病毒的最新威胁:如何恢复您的数据?
  • .net 7 上传文件踩坑
  • .net 调用php,php 调用.net com组件 --
  • .NET 线程 Thread 进程 Process、线程池 pool、Invoke、begininvoke、异步回调
  • []C/C++读取串口接收到的数据程序
  • [100天算法】-目标和(day 79)
  • [Android Pro] AndroidX重构和映射
  • [Android]通过PhoneLookup读取所有电话号码