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

    文章

    2904

    浏览量

    102994
  • MVC
    MVC
    +关注

    关注

    0

    文章

    73

    浏览量

    13783
收藏 人收藏

    评论

    相关推荐

    Spring MVC的工作原理

    Spring MVC是一种基于Java的Web应用程序框架,它采用了Model-View-Controller(MVC)设计模式来分离应用程序的不同方面。Spring MVC的工作原理
    的头像 发表于 12-03 11:49 464次阅读

    javaWeb的MVC三层架构的原理

    JavaWeb的MVC三层架构是一种将应用程序分为三个主要组件的软件设计模式,即模型(Model)、视图(View)和控制器(Controller)。这种架构的目标是将应用程序代码分离
    的头像 发表于 12-03 11:48 527次阅读

    简述mvc的工作流程

    MVC(模型-视图-控制器)是一种用于组织和管理程序代码的软件架构模式。它将应用程序分为模型、视图和控制器三个不同的组件,每个组件负责不同的任务,以实现应用程序的协调和灵活性。 MVC的工作流程可以
    的头像 发表于 11-22 17:01 882次阅读

    javaweb三层架构mvc架构

    JavaWeb三层架构MVC架构是当前Web开发领域中常用的两种架构模式。 一、JavaWeb三层架构 JavaWeb三层
    的头像 发表于 11-22 16:41 461次阅读

    任意模型都能蒸馏!华为诺亚提出异构模型的知识蒸馏方法

    相比于仅使用logits的蒸馏方法,同步使用模型中间层特征进行蒸馏的方法通常能取得更好的性能。然而在异构模型的情况下,由于不同架构模型对特征的不同学习偏好,它们的中间层特征往往具有较大的差异,直接将针对同架构模型涉及的蒸馏方法迁
    的头像 发表于 11-01 16:18 536次阅读
    任意模型都能蒸馏!华为诺亚提出异<b class='flag-5'>构模</b>型的知识蒸馏方法

    SpringCloud微服务架构:实现分布式系统的无缝协作

    在深入Spring Cloud之前,让我们首先了解一下什么是微服务架构。微服务架构是一种软件架构模式,将一个应用程序拆分为一组小型、独立的服务。每个服务都有自己的数据库和业务逻辑,并可以独立部署和扩展。这种
    的头像 发表于 10-12 16:21 263次阅读
    SpringCloud微服务<b class='flag-5'>架构</b>:实现分布式系统的无缝协作

    通过高可用性强制实施精简的IT基础架构模

    电子发烧友网站提供《通过高可用性强制实施精简的IT基础架构模型.pdf》资料免费下载
    发表于 08-22 15:53 0次下载
    通过高可用性强制实施精简的IT基础<b class='flag-5'>架构模</b>型

    Android架构模式飞速演进 到底哪一个才是自己最需要的?

    不得不感叹,近些年android的架构演进速度真的是飞快,拿笔者工作这几年接触的架构来说,就已经有了MVC、MVP、MVVM。
    的头像 发表于 08-02 10:23 426次阅读
    Android<b class='flag-5'>架构模式</b>飞速演进 到底哪一个才是自己最需要的?

    浅谈多机房部署的灾备架构模式

    互联网常见的高可用手段。比如服务冗余部署、异步化设计、负载均衡、服务限流降级熔断、架构拆分、服务治理、分布式存储等等,今天主要是一起聊下,多机房部署的灾备架构模式,来确保服务的高可用。
    的头像 发表于 07-11 11:31 1264次阅读
    浅谈多机房部署的灾备<b class='flag-5'>架构模式</b>

    嵌入式软件最常见的架构模式

    嵌入式软件因为硬件资源限制,可能存在驱动与应用耦合的情况,但对于大型项目,资源充裕的情况下,复杂的业务逻辑、后续扩展维护的需要,必须采用分层和模块化思维,这种思想就是架构模式。一般分7种架构模式
    的头像 发表于 06-22 10:32 1822次阅读
    嵌入式软件最常见的<b class='flag-5'>架构模式</b>

    架构模式的基础知识

        作为软件工程师,为什么至少要学习基本的架构模式?     我相信有很多人回答了这个问题,但我会给你一些考虑的理由。     首先,如果您了解架构模式的基础知识,那么您就更容易遵循架构师的要求
    的头像 发表于 06-13 16:13 435次阅读
    <b class='flag-5'>架构模式</b>的基础知识

    嵌入式7种架构模式分析

      嵌入式软件因为硬件资源限制,可能存在驱动与应用耦合的情况,但对于大型项目,资源充裕的情况下,复杂的业务逻辑、后续扩展维护的需要,必须采用分层和模块化思维,这种思想就是架构模式。一般分7种架构模式
    的头像 发表于 06-13 15:31 3045次阅读
    嵌入式7种<b class='flag-5'>架构模式</b>分析

    智能制造系统的结构模式

    智能制造系统的结构模式可分为五层:   1. 感知层:通过传感器、数据采集器等智能装置采集物理信号和环境数据,实现对生产现场及设备的感知和数据采集。   2. 通信层:将采集的数据交由通讯组件进行传输,并实现数据的实时共享和传输,实现设备间的联动和物联网的连接。
    的头像 发表于 06-08 17:13 823次阅读

    从分层架构到微服务架构介绍(三)

    **管道架构** (Pipeline Architecture),通常也被称为 **管道-过滤器架构** (Pipes and Filter Architecture),是最常用的架构模式之一
    的头像 发表于 05-10 16:58 391次阅读
    从分层<b class='flag-5'>架构</b>到微服务<b class='flag-5'>架构</b>介绍(三)

    从分层架构到微服务架构介绍(一)

    谈到软件系统设计的方法论,在代码层面,有我们熟悉的23种 **设计模式** (design pattern),对应到架构层面,则有所谓的 **架构模式** (architecture pattern
    的头像 发表于 05-10 16:55 808次阅读
    从分层<b class='flag-5'>架构</b>到微服务<b class='flag-5'>架构</b>介绍(一)