加入IT江湖,就像玩王者荣耀。好不容易掌握了一个硬技能,天美就削弱了,还得再练一个。MVC这门技术伴随着我一起成长,我的感受和Java一样深厚。不过,这两年不得不和MVC说再见了。是的,不是Struts没有了,也不是SpringMVC没有了,而是MVC的架构模型被淘汰了。当时代抛弃你,你连再见都不说。所以,看到这篇文章的程序员兄弟们,跟上技术发展的趋势,实力稍微强一点的可以提前预见技术趋势,提前做好准备。最强大的是引领技术趋势。许多。先回顾一下MVC,就像思念一个老朋友一样。MVC模式(Model-view-controller)是软件工程中的一种软件架构模式,它将软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。(摘自Wikipedia-MVC)模型(Model)用于封装与应用程序的业务逻辑相关的数据以及对数据的处理方法。“Model”直接访问数据,“Model”不依赖于“View”和“Controller”,Model不关心它会如何显示或如何操作。但是Model中的数据变化一般都是通过刷新机制来公布的。为了实现这个机制,那些用来监控Model的View必须提前注册到Model上,这样View才能了解数据Model上发生的变化。视图(View)可以实现数据的有目的的展示。View中一般没有过程逻辑。为了在View上实现刷新功能,View需要访问它所监控的数据模型(Model),所以要提前向它所监控的数据进行注册。控制器(Controller)在不同层之间起着组织作用,用于控制应用程序的流程。它处理事件并响应它们。“事件”包括用户操作和数据模型中的更改。Struts和SpringMVC曾经是MVC的搭档。那么是什么导致了MVC模式被淘汰呢?随着移动时代的到来,显示端越来越重要,因此前端技术的发展也越来越猛烈,前端工程师不再是团队中的小弟。他们需要与Java工程师进行平等对话。.前后端分离来了,Node.js来了,前端工程师拿走了MVC的责任,后端工程师真正成为了后端,他们只需要提供API到前端,也不再需要关心redirect\forward的区别,不再需要关心session和cookie的区别,以及如何。当前端工程师拿走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和Controller放在了View层(相当于抽取了Controller的部分逻辑),Model层仍然是服务端返回的数据模型。ViewModel充当UI适配器,这意味着View中的每个UI元素都应该在ViewModel中找到其对应的属性。另外,从Controller中抽取出来的UI相关逻辑放在了ViewModel中,减轻了Controller的负担。这张图是网上找的,MVVM还在学习阶段,后面自己补上。从上面的架构图中,我们可以清晰的梳理出各自的分工。视图层:视图显示。包括UIView和UIViewController,View层可以持有ViewModel。ViewModel层:视图适配器。暴露的属性与View元素的显示内容或元素状态一一对应。一般来说,ViewModel暴露的属性建议是只读的。至于为什么,我们会在实战中进行说明。还有一点就是ViewModel层可以容纳Model。模型层:数据模型和持久抽象模型。数据模型很好理解,就是从服务端拉回来的JSON数据。持久化抽象模型暂时放在Model层,因为MVVM在诞生之初并没有对其进行详细的描述。根据经验,我们通常会把对数据库和文件的操作封装成一个Model,对外提供操作接口。(有的公司把数据访问操作单独放在一层,称为DataAdapter层,所以业界会有很多MVVM的变种,但本质上都是MVVM)。Binder:MVVM的灵魂。可惜英文里没有MVVM的一席之地。它的主要功能是在View和ViewModel之间做双向数据绑定。如果MVVM没有Binder,那么和MVC区别不大。综上,MVC模型本来是完美的,但是随着移动时代的到来,前端的数据展示、交互、跳转变得更加复杂,Controller只能是真的不适合后端了,所以MVVM出现了。
