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
    +关注

    关注

    20

    文章

    3005

    浏览量

    116822
  • MVC
    MVC
    +关注

    关注

    0

    文章

    73

    浏览量

    14489
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    京东缓存中间件架构与缓存内核优化

    一、京东缓存中间件架构 1、背景 在当今高并发、分布式的系统架构中,缓存已成为提升应用性能、降低数据库负载的核心组件。随着业务规模的扩大与系统复杂度的增加,缓存的使用和管理面临诸多挑战:部署模式多样
    的头像 发表于 04-03 16:18 1804次阅读
    京东缓存中间件<b class='flag-5'>架构</b>与缓存内核优化

    探索TRAC020LH:完全可重构模拟电路的卓越之选

    探索TRAC020LH:完全可重构模拟电路的卓越之选 在模拟信号处理的领域中,不断追求更高效、更灵活的解决方案是电子工程师们永恒的目标。今天,我们就来深入了解一款备受瞩目的产品——TRAC020LH
    的头像 发表于 03-27 14:30 155次阅读

    Redis哨兵模式的自动故障检测与主从切换实战

    Redis 主从复制解决读扩展和数据冗余问题,但主节点故障时需要人工介入切换,这在生产环境中是不可接受的。Sentinel(哨兵)模式在主从架构之上增加了自动故障检测和故障转移能力,是 Redis 高可用的标准方案之一。
    的头像 发表于 02-27 11:05 272次阅读

    LAT1199+TrustZone 架构下使用 LPBAM 导致的 HardFault应用笔记

    客户在 Nucleo-U575ZI 开发板上使用 TrustZone 架构,测试 LPBAM 功能。首先使能 TrustZone 架构,然后将 LPGPIO 映射到了非安全区,并且配置
    发表于 01-11 17:23 0次下载

    芯源MCU架构是不是基本都是ARM架构?还有其他的架构吗?

    芯源MCU架构是不是基本都是ARM架构?还有其他的架构吗?
    发表于 11-20 06:21

    浮点舍入模式介绍(六)

    模式(Rounding Mode), RISC-V 架构浮点运算的舍入模式可以通过两种方式指定。 (1)静态舍入模式:浮点指令的编码中有3位作为舍入
    发表于 10-24 07:57

    yaffs文件系统能挂载成功,掉电消失,为什么?

    上电会消失。 代码里创建文件夹却失败。显示错误,返回值-28. 求助大佬。NAND Flash型号是MT29F64G08AFAAAWP。stm32f407。
    发表于 10-13 07:50

    什么是ARM架构?你需要知道的一切

    从智能手机到工业边缘计算机,ARM®架构为全球数十亿台设备提供动力。ARM®以其效率优先的设计和灵活的许可模式而闻名,已迅速从移动处理器扩展到人工智能边缘计算、工业控制器,甚至数据中心。本文我们将
    的头像 发表于 09-11 14:48 1637次阅读
    什么是ARM<b class='flag-5'>架构</b>?你需要知道的一切

    GNSS模拟器核心架构如何实现?技术主管深度解读设计原理

    本文聚焦GNSS模拟器技术领域的核心难点,包括系统组成与核心引擎,GNSS频段基础,控制模式架构理念
    的头像 发表于 07-29 14:58 693次阅读
    GNSS模拟器核心<b class='flag-5'>架构</b>如何实现?技术主管深度解读设计原理

    飞睿UWB超宽带定位测距技术,数字钥匙重塑智能生活,高精度厘米级定位无感解锁

    钥匙消失,门却更懂你。当厘米级定位遇见空间感知,一场从“主动操作”到“无感响应”的智能革命已悄然到来。
    的头像 发表于 07-15 15:23 1151次阅读
    飞睿UWB超宽带定位测距技术,数字钥匙重塑智能生活,高精度厘米级定位无感解锁

    晶体管架构的演变过程

    芯片制程从微米级进入2纳米时代,晶体管架构经历从 Planar FET 到 MBCFET的四次关键演变。这不仅仅是形状的变化,更是一次次对物理极限的挑战。从平面晶体管到MBCFET,每一次架构演进到底解决
    的头像 发表于 07-08 16:28 2498次阅读
    晶体管<b class='flag-5'>架构</b>的演变过程

    AMD FPGA异步模式与同步模式的对比

    本文讲述AMD UltraScale /UltraScale+ FPGA 原生模式下,异步模式与同步模式的对比及其对时钟设置的影响。
    的头像 发表于 07-07 13:47 1778次阅读

    Vector全流程开发工具链概述

    在软件定义汽车(SDV)时代,汽车软件的复杂度和重要性显著提升,开发模式也逐步从基于ECU的独立软件开发向集中化、平台化的软件架构演进。传统的开发模式由于硬件与软件紧耦合,导致升级难度大、开发周期长
    的头像 发表于 06-17 13:45 1309次阅读
    Vector全流程开发工具链概述

    主流版本控制工具Git vs Perforce P4:架构模式、性能、大文件管理及分支管理对比详解

    Git vs Perforce P4,如何选型?架构模式、性能、大文件管理、分支策略四大维度对比,帮你全面了解两者的核心差异,选择更合适你团队需求的版本控制系统。
    的头像 发表于 06-13 14:52 938次阅读
    主流版本控制工具Git vs Perforce P4:<b class='flag-5'>架构模式</b>、性能、大文件管理及分支管理对比详解

    服务器数据恢复—服务器重装系统导致分区消失的数据恢复案例

    服务器上有一组由raid卡组建的raid5磁盘阵列。上层安装linux才做系统,采用XFS文件系统,划分了3个分区。 管理员将服务器的操作系统重装后,发现服务器上的分区发生了改变:一个分区消失,其他分区不可访问。
    的头像 发表于 05-14 10:13 731次阅读
    服务器数据恢复—服务器重装系统导致分区<b class='flag-5'>消失</b>的数据恢复案例