mvc和mvvm(mvc和mvvm是什么)
MVC与MVVM区别?
首先是mvc,顾名思义,mvc是将model,
view和controller分离,让彼此的职责(responsibility)能够明确的分开,这样不论是改m,
v还是c,都可以确保另外两层可不用做任何修改,同时这样的分层也可以加强程式的可测试性(testability),view和model基本上是相关的,但它们并不会有直接的相依关系,而是由controller去决定model产生的资料,然后丢给view去做呈现,也就是说,controller是model和view之间的协调者(coordinator),view和model不能直接沟通,以确保责任的分离。而controller可以只是一个系结model和view的小类别,也可以是大到包含workflow,
enterprise
services或是做为外部系统的proxy
services等的逻辑系统,mvc各元件是可以分离的组件,也可以是分离的系统(当然要设计一些机制在相互沟通)
再来是mvvm,mvvm的架构一样是m,
v分离,但中间是以vm
(viewmodel)来串接,这个viewmodel比较像是view的一个代理程式,它负责直接对model做沟通,而view可以透过一些机制(ex:
events,
two-way
databindings,
...)来和viewmodel沟通以取得资料或将资料抛给model做存取等工作,viewmodel也可以作为和外部系统的代理程式,例如web
service或是rest
service或是enterprise
services等等,不过它和mvc不同的地方,就是viewmodel和view的黏合度比较高,因为view必须要透过viewmodel才可以取得model,而viewmodel又必须要处理来自view的通知讯息,所以虽然职责一样分明,但是却不像mvc那样可以扩展到整个系统元件都能用。如果mvvm要和mvp比较的话,mvvm会比mvp更灵活一点。
接着是mvp,mvp一样也是职责分明,且model与view分离的架构,但是这个p
(presenter)和viewmodel就很类似,不过就如同presenter
(主持人)这个字所代表的意义,所有主控view呈现的工作,都是由presenter来做,而view本身只是presenter所要使用的舞台而已,所以view原则上会相依于presenter,但是为了要做到关注点分离(soc原则),所以在view和presenter间都会加入一个介面(ex:
iview),然后以ioc的方式将view注射到presenter中,而presenter就使用介面所定义的方法去操控,而view就透过介面所定义的方法去呈现介面即可。但也因为受限于介面,所以presenter只能依介面定义的动作去回应与处理,而不能再做更多的延伸功能,除非更改view的介面
由上面各个架构的讨论,我们可以得到以下的结果:
mvc
架构适合于大型系统,它可以分层且可以在实体层面切割为不同的机器或服务,只要彼此间具有适当的通讯协定即可。
mvvm
架构适合像xaml
这种与程式码无关(code
ignorance)
的使用者介面设计,只要view
中下特定的指令与viewmodel
串接,就可以享有viewmodel
沟通的功能,而viewmodel
只需做一些特别的介面实作,即可平顺的和view
沟通。
mvp
架构适合集中由程式码决定view
动作的应用程式,而view
只需要实作特定的介面即可,不需要太复杂的工作,但presenter
则可能会受限于view
介面的动作,而无法做更进一步对view
的控制。
MVC和MVVM两框架是什么?
1.MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写。
2.MVVM是Model-View-ViewModel的简写。它本质上就是MVC 的改进版。
3.MVVM模式和MVC模式一样,主要目的是分离视图(View)和模型(Model)
4.最典型的MVC就是JSP + servlet + javabean的模式。
也就是说,不管是MVC还是MVVM,都是为了使程序更加便利,用一个成语来说,叫做各司其职,每一层由每一层相应的工作,不会多做也不会少做,而MVVM也是与时俱进的产物,应对人们日益复杂的需求变化而产生的。
mvvm模式和mvc的区别
mvvm模式和mvc的区别是:
MVC和MVVM的区别并不是VM完全取代了C,ViewModel存在目的在于抽离Controller中展示的业务逻辑,而不是替代Controller,其它视图操作业务等还是应该放在Controller中实现。也就是说MVVM实现的是业务逻辑组件的重用。
MVC中Controller演变成MVVM中的ViewModel。
MVVM通过数据来显示视图层而不是节点操作。
MVVM主要解决了MVC中大量的dom操作使页面渲染性能降低,加载速度变慢,影响用户体验等问题。
mvvm模式和mvc模式解耦视图和模型的区别是:
在模式中,每一个视图都有对应的一个ViewModel,同时ViewModel与模型建立联系。当接收到用户请求后,ViewModel获取模型响应数据,并通过数据绑定将相应的视图页面重新渲染。
模型层的数据只需要传入ViewModel即可实现视图的同步更新,从而实现了视图和模型之间的松散耦合。
于MVC不同的是,MVC是系统架构级别的,而MVVM只用于单页面上的。因此,MVVM的灵活型号要远大于MVC。如果将这里的M抛开,只看VVM的话,那就是一个组件(如treeview)的设计模式。所以MVVM模式也是组件开发的最佳实践。
iOS中的MVC和MVVM
MVC的实现思路是:用户操作View,在Controller层完成业务逻辑处理,更新Model层,将数据显示在View层。
在MVC中,每个层之间都有关联,耦合比较紧,在大型项目中,维护起来比较费力。
View把控制权交给Controller层,自己不执行业务逻辑;Controller层执行业务逻辑并且操作Model层,但不会直接操作View层;View和Model层的同步消息是通过观察者模式进行,而同步操作是由View层自己请求Model层的数据,然后对视图进行更新,观察者模式可以做到多视图同时更新。
Person.h
Person.m
TestView.h
TestView.m
ViewController.m
MVVM和MVP的最大区别是采用了双向绑定机制,View的变动,自动反映在ViewModel上。
MVVM结构如图:
模型层:
Person.h
Person.m
视图层:
TestView.h
TestView.m
PersonViewModel.h
PersonViewModel.m
ViewController.m
mvvm和mvc的区别
MVVM和MVC的区别就是MVVM实现了自动同步,MVVM比较精简。
1、MVVM实现了自动同步
它实现了View和Model的自动同步,也就是当Model的属性改变时,我们不需要再手动操作Dom元素来改变View的现实,而是改变属性后该属性对应View层显示会自动改变(对应Vue数据驱动的思想)。
2、MVVM比较精简
MVVM比MVC也精简了许多,不仅简化了业务和界面的依赖,还解决了数据频繁更新的问题,不在用选择器操作DOM元素,因为在MVVM中View不知道Model的存在,Model和ViewModel也观察不到View,这种低耦合模式提高了代码的可重用性。
MVC
MVC全名是(Model View Controller),是模型——视图——控制器的缩写,一种软件设计典范模型(model):是应用程序中用于处理应用程序数据逻辑的部分,通常模型对象负责在数据库中存取数据视图(view):是应用程序中处理数据显示的部分。
通常视图是依据模型数据创建的控制器(controller):是应用程序中处理用户交互的部分。通常控制器负责从视图读取数据:控制用户输入,并且向模型发送数据。
MVc的思想:简单说就是controller负责将model中的数据用view显示出来换句话说就是在controller里面吧model的数据赋值给view。
MVC和MVVM的区别 & vue的虚拟DOM的理解
MVC: M,即model,指数据层 V,指view, 即视图层 C, controller,控制器
View层发起数据请求,Controller层接到请求后,接收参数,把命令传向Model层,Model层处理数据后,把数据传回controller,而controller把数据传回客户端,也就是view层
典型代表: nodejs的Egg框架, php的ThinkPHP框架都是使用的MVC模式
MVVM: M: model,数据层 V: view,视图层,即UI , VM (ViewModel)是视图层和数据层的中间层
典型代表: Vue框架
Vue的双向数据绑定就得益于MVVM框架, 视图层改变,底层封装好的VM层会更新数据,而数据改变,VM层会更新视图
一、虚拟DOM就是一个JS对象,用它来描述真实DOM
二、为什么要用虚拟DOM
越多的真实dom操作,越损耗性能
而用虚拟dom操作数据要大大的减少性能损耗,提高渲染效率
二、虚拟DOM的渲染流程
1、获取数据
2、根据数据创建VDOM (相当于给对象赋值)
3、根据VDOM渲染生成真实DOM ( 根据createElement(‘DIV’) )
4、当数据发生改变后,又会生成新的VDOM
5、通过 diff 算法 比对 多次生成的 VDOM, 将不同的内容比对出来,然后再进行真实DOM渲染,
一样的内容是不会进行渲染的,这就是VDOM 的 ‘就地复用’ | ‘惰性原则’