今天我们讲讲历史,讲讲故事,不扯高深术语。

MV*表示的意思是:M(Model逻辑层) + View(视图层) + *(中间者)。上帝提出了这个逻辑与视图分离,用中间者进行连接的伟大思想,并将实现这个思想的艰巨任务安排给人间。

人们纷纷跃跃欲试,想率先实现上帝布置的任务。随着历史的推移,不同时期先后出现了三个著名的中间者,他们依次是ControlerPresenterViewModel

Controler是第一个吃螃蟹的小伙子,昵称叫控制者。它与MV结合并自命名为MVC模式。它生平最大的贡献是能把视图层View的数据写进逻辑层Model,但是很可惜,View不是通过它来读取Model的数据,而是跳过它,直接读取Model的数据。被“选择性无视”的Controler大失颜面,这件事也让它经常被后世取笑。

上帝很赞赏Controler的勇气,但看着MVC这上下都不对称的数据读写方式,感觉有些哭笑不得,显然对Controler不是很满意。

另外一个叫Presenter的小伙站了出来,他身材健硕,力大无穷。只见他自告奋勇地说:“我是Presenter,中文名叫主持人,以后视图层和逻辑层他们之间的通信交给我来主持!”。

于是一个新的模式出现了---MVP模式

这个模式看起来非常不错,在试行了一段时间后,上帝也感觉非常满意,它不仅对称,还隔离了Model和View,与前辈Controler那种半中间者不同,Presenter是一个真正意义上完全体的中间者!

但令人没有想到的是,好景不长,一段时间后Presenter突然暴毙,死因:过度劳累

人们开始反思MVP模式存在的问题,虽然它隔离了Model和View,但是Presenter总是需要手动去帮助Model和View完成通信,是个“手动挡”,时间一长,Presenter里面的业务逻辑越来越重,终于有一天它不堪重负倒下了。

还能再选一个Presenter吗?显然不能,如此繁重的需要手动完成的活儿,选上去了就是等死啊,太累了,没人想干。

不过江山代有人才出,人类的智慧真是无穷无尽,有一天一个看起来弱不禁风的小姑娘站了出来,她说道:“我叫ViewModel,也许我可以一试”。

民众纷纷瞪大了双眼,联想到强壮如牛的Presenter都死得这么惨,这个看起来弱不禁风,身体几乎透明的小女子,能承担这样繁重的任务吗?

小女子说道:“我有三件法宝,分别唤作Angular,React和Vue,它们个个充满魔力,不需要手动来回处理View和Model之间的那些琐碎破事,它是自动完成的,用上它,你们甚至感觉不到我的存在,我就是这么6,大道至简,一个真正完美的中间者可以让人几乎忘却它的存在。”

民众一片哗然。

这,就是MVVM,它带来了一个全新的理念:自动双向绑定

一时间,全民欢腾,上帝也大为满意,ViewModel的拥护者迅速增长,并迅速影响到全世界。

她是最好的中间者吗?不知道,至少从目前来看,她是。

《茶余饭后小故事》MV*、MVC、MVP、MVVM的前世今生的更多相关文章

  1. Android App的设计架构:MVC,MVP,MVVM与架构AAAAA

    1. 架构设计的目的1.1 通过设计使程序模块化,做到模块内部的高聚合和模块之间的低耦合.1.2 这样做的好处是使得程序在开发的过程中,开发人员只需要专注于一点,提高程序开发的效率,并且更容易进行后续 ...

  2. Android App的设计架构:MVC,MVP,MVVM与架构经验谈

    相关:http://www.cnblogs.com/wytiger/p/5996876.html 和MVC框架模式一样,Model模型处理数据代码不变在Android的App开发中,很多人经常会头疼于 ...

  3. 前端mvc mvp mvvm 架构介绍(vue重构项目一)

    首先 我们为什么重构这个项目 1:我们现有的技术是前后台不分离,页面上采用esayUI+jq构成的单页面,每个所谓的单页面都是从后台胜场的唯一Id 与前端绑定,即使你找到了那个页面元素,也找不到所在的 ...

  4. 浅析前端开发中的 MVC/MVP/MVVM 模式

    MVC,MVP和MVVM都是常见的软件架构设计模式(Architectural Pattern),它通过分离关注点来改进代码的组织方式.不同于设计模式(Design Pattern),只是为了解决一类 ...

  5. MVC, MVP, MVVM比较以及区别(上)

    MVC, MVP和MVVM都是用来解决界面呈现和逻辑代码分离而出现的模式.以前只是对它们有部分的了解,没有深入的研究过,对于一些里面的概念和区别也是一知半解.现在一边查资料,并结合自己的理解,来谈一下 ...

  6. android MVC && MVP && MVVM分析和对比

    相关:http://www.cnblogs.com/wytiger/p/5305087.html 出处http://blog.csdn.net/self_study,对技术感兴趣的同鞋加群544645 ...

  7. MVC, MVP, MVVM比较以及区别

    MVC, MVP和MVVM都是用来解决界面呈现和逻辑代码分离而出现的模式.以前只是对它们有部分的了解,没有深入的研究过,对于一些里面的概念和区别也是一知半解.现在一边查资料,并结合自己的理解,来谈一下 ...

  8. [1] MVC & MVP &MVVM

    开发架构之MVC & MVP & MVVM  

  9. [转]MVVM架构~mvc,mvp,mvvm大话开篇

    MVP 是从经典的模式MVC演变而来,它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理,Model提供数据,View负 责显示.作为一种新的模式,MVP与MVC有着一 ...

  10. 用户界面编程模式 MVC MVP MVVM

    用户界面编程模式 MVC MVP MVVM 程序 = 数据 + 算法 数据:就是待处理的东西 算法:就是代码 涉及到人机交互的程序,不可避免涉及到界面和界面上显示的数据原始方式是界面代码和逻辑代码糅合 ...

随机推荐

  1. 2020年大厂Java面试题(基础+框架+系统架构+分布式+实战)

    前言 作为一个Java开发者,Java架构师应该是大家的一个职业目标了吧. 要成为Java架构师,首先你要是一个高级Java工程师,熟练使用各种框架,并知道它们实现的原理.jvm虚拟机原理.调优,懂得 ...

  2. 实验17:NAT

    实验14-1:静态NAT 配置 Ø    实验目的通过本实验可以掌握(1)静态NAT 的特征(2)静态NAT 基本配置和调试 Ø    拓扑结构 实验步骤n    步骤1:配置路由器R1 提供NAT ...

  3. 从零开始学习redis源码

    2020的开年是比较艰难的,爆发了肺炎疫情,希望大家多注意安全,也希望疫情早日好转! 以3.2版本的源码为例,开始讲解,有时会贴出源码,进行说明,并会注明源码出处. 数据库 应该都知道默认redis会 ...

  4. pyinstaller相关问题 & pygame文件打包成exe文件 & 武装飞船 & 飞机大战

    自己照书写了一个飞机大战游戏的python程序,想把它打包成一个exe文件,在查阅相关教程并经过数次尝试后终于成功. 安装打包应用 pyinstaller 在cmd命令窗口下pip install p ...

  5. 【UEFI】--- 探究BIOS NvRam空间的的位置以及大小

    按照国际惯例--先上问题:1. 什么是NvRam空间,里面存储了什么数据 2. 如何找到NvRam空间在BIOS-bin文件中的位置 NvRam空间的学名为: Non-Volatile Ram即非易失 ...

  6. 利用视频解析网站免费观看各大平台VIP电影

    需求: 观看VIP电影.VIP电视 准备: 1.视频解析网站 2.VIP电影URL 教程开始: 1.百度搜索[视频解析],会索引出大量的视频解析网站,随便选择一个网站. 2.找到想观看的VIP视频,复 ...

  7. 集智学院 “Deep X:Deep Learning with Deep Knowledge”的公开讲座---总结

    人工智能旨在了解人类智能的本质,并创造出能模仿人类智能做出反应的智能机器,目前在一些领域已经取得显著的成功,如AI玩游戏.问答系统.自动驾驶.无人机.机器人.翻译.人脸识别.语音识别等领域.深度学习的 ...

  8. postfix 被当作垃圾邮件中转站

    磁盘 io 总是满的状态 该服务器只有监控和邮件elk在上面. 发现邮件日志 疯狂的输出 tail -f /var/log/maillog 大致都是来自于 yahoo.com.tw的东西 清空了 /v ...

  9. FastDFS 配置文件 storage.conf

    FastDFS 版本5.05 配置文件分为三部分   控制器:tracker.conf存储器:storage.conf 客户端:client.conf 文件位置:/etc/fdfsstorage.co ...

  10. [Redis-CentOS7]Redis事务操作(六)

    事务操作 隔离操作: 事务中所有的命令都会序列化,按顺序执行,不会被其他命令打扰 原子操作: 事务中所有的命令要么全部执行,要么全部不执行 添加事务并执行 127.0.0.1:6379> MUL ...