MVC与MVVM区别?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
的控制。
参考技术A 在MVC里,View是可以直接访问Model的!从而,View里会包含Model信息,不可避免的还要包括一些业务逻辑。MVC模型关注的是Model的不变,所以,在MVC模型里,Model不依赖于View,但是
View是依赖于Model的。不仅如此,因为有一些业务逻辑在View里实现了,导致要更改View也是比较困难的,至少那些业务逻辑是无法重用的。MVVM在概念上是真正将页面与数据逻辑分离的模式,它把数据绑定工作放到一个JS里去实现,而这个JS文件的主要功能是完成数据的绑定,即把model绑定到UI的元素上。有人做过测试:使用Angular(MVVM)代替Backbone(MVC)来开发,代码可以减少一半。

MVC与MVVM区别

mvc:Model=>View=>Controller

当用户在Model上有输入时,会通过Controller去更新模型,并且通知View进行更新

mvvm:model=>view=>viewmodel

提供对View 和 ViewModel 的双向数据绑定,这使得ViewModel 的状态改变可以自动传递给 View,即所谓的数据双向绑定。

以上是关于MVC与MVVM区别?的主要内容,如果未能解决你的问题,请参考以下文章

前端开发MVC与MVVM的区别

MVC与MVVM区别?

MVC与MVVM区别?

ios mvc和mvvm的区别

MVC与MVVM区别

mvc与mvvm的区别与联系