0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

MVC架构模式为什么悄然消失了

汽车玩家 来源:今日头条 作者:令狐冲学Java 2020-04-12 19:18 次阅读

投身IT江湖,就像打王者荣耀一样,好不容易练会了一个硬性,结果天美把它削弱了,你不得不再去练习一个。

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给前端就行,再也不用关心redirectforward有什么区别,再也不用关心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就出现了。

后面的文章中会继续阐述MVVM、SPA等前端的架构模型,就像练一个天美的新英雄一样。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • JAVA
    +关注

    关注

    19

    文章

    2974

    浏览量

    105048
  • MVC
    MVC
    +关注

    关注

    0

    文章

    73

    浏览量

    13891
收藏 人收藏

    评论

    相关推荐

    JCMsuite—单模光纤传播模式

    所需参数的详细描述。 下图显示两个计算本征模的电场的z分量(对数尺度下)。两者都属于相同的有效折射率,属于双重简并。特征值存储在文件eigenvalues.jcm中。 之后弯曲单模光纤教程会说明如何计算弯曲单模光纤的基本传播模式
    发表于 01-09 08:57

    ADS1299对START PIN接地,DRDY信号就消失,为什么?

    /8192(2.048MHz/8192=250),我用示波器测得出DRDY周期是50Hz。我对START PIN接地,这个DRDY信号就消失,接高电平后,又出来了。先发SDATAC后,再读写寄存器,也不成功。不知道什么原因,请各位帮帮忙!谢谢!急急急。。谢谢!
    发表于 01-09 07:06

    变频器出现输出突然消失故障原因及解决

          变频器作为现代工业自动化中不可或缺的重要设备,其在电机调速、节能降耗等方面发挥着关键作用。然而,在实际应用中,变频器偶尔会出现输出突然消失的故障,这不仅影响生产线的正常运行,还可能对设备
    的头像 发表于 01-03 07:38 179次阅读

    原子结构模型及特点 原子的组成及结构解析

    原子是物质的基本单位,由原子核和电子组成。原子结构模型的发展经历几个阶段,每个阶段都有其特点和局限性。 一、原子结构模型的演变 道尔顿模型(1803年) 英国化学家约翰·道尔顿提出了原子论,认为
    的头像 发表于 12-17 15:22 972次阅读

    SSM框架的源码解析与理解

    MVC模式,使得开发Web应用程序变得更加高效和简单。 1. Spring框架 基本功能: Spring是一个开源的Java平台,它提供全面的基础设施支持,以便开发Java应用程序。Spring框架
    的头像 发表于 12-17 09:20 358次阅读

    商汤科技完成战略组织架构重组

    了全新的“1+X”架构模式。其中,“1”代表公司的核心业务,即全力打造行业领先的AI云平台。该平台将实现大装置、基础模型与AI应用之间的无缝集成,为用户提供更为便捷、高效的AI服务。 在CV(计算机视觉)领域,商汤科技更是加大投入力
    的头像 发表于 12-13 14:09 240次阅读

    训练RNN时如何避免梯度消失

    在处理长序列数据时,RNN(循环神经网络)模型可能会面临梯度消失的问题,这是由于反向传播过程中,由于连续的乘法操作,梯度会指数级地衰减,导致较早的时间步的输入对较后时间步的梯度几乎没有影响,难以进行
    的头像 发表于 11-15 10:01 418次阅读

    Purepath consle在连接PCM1860后除了EVM的标签页都消失,为什么?

    Purepath consle在连接PCM1860后除了EVM的标签页都消失
    发表于 10-22 06:52

    PGA309输出电压会无缘无故的消失,为什么?

    我设计一块线路板,上面用到了ti的信号调理芯片PGA309,用AD芯片采样PGA309的输出电压,然后给单片机处理,芯片调试好了,效果也还可以,但是遇到一个棘手的问题,就是应用过程中给板子上电,会经常出现PGA309输出电压会无缘无故的消失,变为0,还请各位给看看,是
    发表于 08-13 06:39

    BLE蓝牙掉电绑定信息消失的原因?怎么解决?

    测试手机连接后,重启ESP32S3,板子上的绑定信息就丢失。还有我添加到白名单的地址也会随着重启消失。白名单我可以通过NVS记录,但是绑定的密钥信息我无法存储。我查阅BLE的接口文档,没有看到保存绑定信息的接口。请教一下我应
    发表于 06-14 06:25

    RISC-­V架构的特点

    RISC-­V架构的特点 RISC-V架构RISC-V 架构是基于 精简指令集计算(RISC)原理建立的开放 指令集架构(ISA),RISC-V是在指令集不断发展和成熟的基础上建立的全
    发表于 05-24 08:01

    OrCAD Capture CIS 搜索框消失问题

    之前正常使用的Capure CIS,现在打开突然发现搜索栏栏目消失不能查找放置元件,在网上也找不到相关信息,不知道该如何解决。
    发表于 03-30 09:20

    LoRaWAN网络架构及三种工作模式

    LoRaWAN(Long Range Wide Area Network,长距离广域网)是由LoRa联盟推出的一种低功耗广域网标准,它定义网络的通讯协议和系统架构。LoRaWAN技术为电池供电的无线设备提供了局域、全国乃至全球的网络连接。
    的头像 发表于 03-05 15:59 2767次阅读

    CY7C68013A跑的USB High Speed模式,在win10上跑着跑着USB设备消失的原因?

    RT所示,我现在用这颗USB芯片,跑的USB High Speed模式,在win10上会出现跑着跑着USB设备消失,设备管理器中都也找不到该设备,必须要重新插拔一下才可以,有时候1
    发表于 02-28 07:42

    用上传感器,鼠标里的小球消失

    这样一个小球。早在几十年前的鼠标身上,就有这样的球。再往前追溯, 人们甚至直接把保龄球塞进了鼠标的“老前辈”里。 但今天,市面上大部分鼠标里又没有小球,小球的消失跟光学鼠标的发展有关。 其实早在 1980 年,麻省理工学院的
    的头像 发表于 02-20 09:19 515次阅读