专栏首页码农编程进阶笔记技术趋势:是什么让MVC悄然消失的?

技术趋势:是什么让MVC悄然消失的?

MVC这门技术伴随着我的成长,感情和Java一样深厚,但是,最近两年却不得不和MVC说再见了。是的,不是Struts没了,也不是SpringMVC没了,而是MVC这种架构模式被淘汰了。当时代抛弃你时,连一声再见都不会说。所以,看到这篇文章的各位程序员兄弟们,紧跟技术发展趋势,再牛逼一点的,能够提前预见技术趋势,提前准备,最牛逼的,引领技术趋势,咳咳,想的有点多。

我们先回顾一下MVC吧,就像怀念一个老朋友。

MVC模式(Model–view–controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。( 摘自 维基百科-MVC )

模型(Model) 用于封装与应用程序的业务逻辑相关的数据以及对数据的处理方法。“ Model ”有对数据直接访问的权力,“Model”不依赖“View”和“Controller”,Model 不关心它会被如何显示或是如何被操作。但是 Model 中数据的变化一般会通过一种刷新机制被公布。为了实现这种机制,那些用于监视此 Model 的 View 必须事先在此 Model 上注册,从而,View 可以了解在数据 Model 上发生的改变。

视图(View) 能够实现数据有目的的显示。在 View 中一般没有程序上的逻辑。为了实现 View 上的刷新功能,View 需要访问它监视的数据模型(Model),因此应该事先在被它监视的数据那里注册。

控制器(Controller) 起到不同层面间的组织作用,用于控制应用程序的流程。它处理事件并作出响应。“事件”包括用户的行为和数据 Model 上的改变。

Struts和SpringMVC曾经是MVC双雄。

那是什么导致MVC模式被淘汰了呢?移动时代的到来,展示端愈来愈重要,所以前端技术发展越来越猛烈,前端工程师也不再是团队的小弟了,他们要求和Java工程师平等对话。

前后端分离来了,Node.js来了,前端工程师把MVC的职责都给抢走了,后端工程师真正成为了后端,只需要提供API给前端就行,再也不用关心redirect\forward有什么区别,再也不用关心session、cookies有什么区别,怎么样。当前端工程师拿走MVC的职责之后,自然会把MVC模式改成更适合前端的模式:MVVM。

MVVM(Model–View–Viewmodel)也是一种软件架构模式,它必将取代MVC,或者说的好听一些,它是MVC基础上演化而来。

MVC中的M就是单纯的从网络获取回来的数据模型,V指的我们的视图界面,而C就是我们的ViewController。

在其中,ViewController负责View和Model之间调度,View发生交互事件会通过target-action或者delegate方式回调给ViewController,与此同时ViewController还要承担把Model通过KVO、Notification方式传来的数据传输给View用于展示的责任。随着业务越来越复杂,视图交互越复杂,导致Controller越来越臃肿,负重前行。脏活累活都它干了,到头来还一点不讨好。福报修多了的结果就是,不行了就重构你,重构不了就换掉你。

来一张斯坦福老头经典的MVC架构图。

所以为了解决这个问题,MVVM就闪亮登场了。他把View和Contrller都放在了View层(相当于把Controller一部分逻辑抽离了出来),Model层依然是服务端返回的数据模型。而ViewModel充当了一个UI适配器的角色,也就是说View中每个UI元素都应该在ViewModel找到与之对应的属性。除此之外,从Controller抽离出来的与UI有关的逻辑都放在了ViewModel中,这样就减轻了Controller的负担。

这张图是从网上找的,MVVM还在学习阶段,后续补一张自己的

从以上的架构图中,我们可以很清晰的梳理出各自的分工。

  • View层: 视图展示。包含UIView以及UIViewController,View层是可以持有ViewModel的。
  • ViewModel层: 视图适配器。暴露属性与View元素显示内容或者元素状态一一对应。一般情况下ViewModel暴露的属性建议是readOnly的,至于为什么,我们在实战中会去解释。还有一点,ViewModel层是可以持有Model的。
  • Model层: 数据模型与持久化抽象模型。数据模型很好理解,就是从服务器拉回来的JSON数据。而持久化抽象模型暂时放在Model层,是因为MVVM诞生之初就没有对这块进行很细致的描述。按照经验,我们通常把数据库、文件操作封装成Model,并对外提供操作接口。(有些公司把数据存取操作单拎出来一层,称之为DataAdapter层,所以在业内会有很多MVVM的变种,但其本质上都是MVVM)。
  • Binder: MVVM的灵魂。可惜在MVVM这几个英文单词中并没有它的一席之地,它的最主要作用是在View和ViewModel之间做了双向数据绑定。如果MVVM没有Binder,那么它与MVC的差异不是很大。

总结来说,MVC模式本来是完美的,但是随着移动时代的到来,前端数据展示、交互、跳转变得复杂了,Controller的只能真的不适合在放到后端了,所以MVVM就出现了。

本文分享自微信公众号 - 码农编程进阶笔记(lxw1844912514),作者:竹子

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-03-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Gartner:如果没有人工智能 ,技术提供商会错失 3000 亿美元市场

    【新智元导读】Gartner上周在北京举办发布会,Gartner个人技术团队研究副总裁Tracy Tsai和新智元分享了她对于人工智能商业趋势和影响的分析与判断...

    新智元
  • 小猿观察丨大数据看后TPP国人心态:既愤怒又恐惧?who怕who!

    最近各大媒体都在热议TPP,那TPP到底是什么?TPP的达成对中国来说意味着什么?引用网民的话简单来说就是:过度热爱自由的万恶资本主义国家,觉得现在各国之间的贸...

    数据猿
  • 落魄“贵族”Nuance想东山再起?太难

    镁客网
  • VR这把烈火注定重现江湖?

    近年来VR设备的销量再创新高,布局VR行业的厂家也越来越多,综合来看在多种因素交织下,我们貌似又一次站在了VR趋势的引爆点上。

    刘旷
  • 零售业PK的到底是什么?用户思维见真章

    618后零售业很热闹:两家生鲜电商前后脚IPO,有传言称某便利店即将上市,某社区团购平台宣布破产……消息层出不穷,反映出零售行业竞争的激烈、变化的迅猛。

    罗超频道
  • 李开复说明年有一批AI创企会倒闭,不想死的创业公司需要警惕什么?

    镁客网
  • 接口仔也不是好当的,聊一聊前后端分离开发中后端接口设计规范

    随着互联网的高速发展,前端页面的展示、交互体验越来越灵活、炫丽,响应体验也要求越来越高,后端服务的高并发、高可用、高性能、高扩展等特性的要求也愈加苛刻,从而导致...

    江南一点雨
  • 美国被曝拟允许美企与华为合作制定5G标准,只是缓兵之计?

    昨夜,路透社发布独家重磅消息:美国商务部即将签署一项新规则,以允许美国企业和华为共同参与5G网络标准的制定。

    新智元
  • 10年Java老鸟忠告:技术人这4个错别再犯了!

    公司的目的是盈利,招你进来不是让你学习的,是为了让你创造利益。盈利的前提下,公司会尽力培养你,但是更多的时候能力成长还是得靠自己。见过太多以“在公司学不到东西”...

    lyb-geek
  • 传统教育难逃被颠覆厄运

    大数据文摘
  • 股价创新低,削减iPhoneXR产量,苹果的凛冬将至?

    虽然双十一刚过,但苹果的风头显然大不如从前,除了iPhone XR的销量看衰,其供应商和分析师也下调了各自的业绩,导致12日苹果的股价创7月底以来的新低,同时苹...

    镁客网
  • 10 年 JAVA 老鸟忠告:技术人这 4 个错别再犯了!

    坐标魔都,近5年服务于一家不大不小的公司,从A轮到D轮融资,人来人往的研发团队到现在近两百人,看过领导离职创业,也看过太多跳槽,看到更多的是技术人的懒惰与错误。...

    Java技术栈
  • 10年Java老鸟忠告:技术人这4个错别再犯了!

    坐标魔都,人来人往的研发团队到现在近两百人,看过领导离职创业,也看过太多跳槽,看到更多的是技术人的懒惰与错误。

    Java团长
  • 10年Java老鸟忠告:技术人这4个错别再犯了!

    坐标魔都,人来人往的研发团队到现在近两百人,看过领导离职创业,也看过太多跳槽,看到更多的是技术人的懒惰与错误。 给年轻的技术人几个忠告,希望你别...

    范蠡
  • SD-WAN十问,带你从入门到进阶

    近年来,SD-WAN发展势头强劲,越来越多的企业用户纷纷着手开始部署SD-WAN,SD-WAN市场继续呈爆炸式增长,并被各种分布式的组织广泛采用,除了原有的MP...

    SDNLAB
  • 腾讯发币?官方立马回应:否认!

    BTC今日多次下探,最低跌至7480美元,跌幅3.58%。主流币种BCH暂报747美元(-3.29%)、ETH暂报417美元(-3.11%)、ETC暂报15.8...

    dobitrade
  • 前端科普系列(1):前端简史

    回答这个问题之前,我想起了一道非常经典的前端面试题:“从输入URL到页面呈现在你面前到底发生了什么?”这个题目可以回答的很简单,但仔细思考,也可以回答的很深,这...

    2020labs小助手
  • 年终盘点:收单行业现状以及未来发展趋势

    在五年以前,银行卡与现金“两分天下”,各自切分了大额、批发、中高频和小额、零售、高频的消费支付市场。随着过去几年来国内支付行业快速发展,以二维码作为受理媒介、手...

    金融民工小曾
  • 【董天一】IPFS:世界正在悄然发生变化

            2015-05-05 Juan Benet 在自己的终端里面敲入了下面的文字:

    圆方圆学院

扫码关注云+社区

领取腾讯云代金券