mvc和mvvm(mvc和mvvm是什么)

http://www.itjxue.com  2023-01-26 16:00  来源:未知  点击次数: 

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 的 ‘就地复用’ | ‘惰性原则’

(责任编辑:IT教学网)

更多

推荐Flash实例教程文章