MVP模式和MVVM模式

MVP模式

模型-视图-表示器,也就是MVP模式。是mvc模式的一种衍生模式,专一于改进表示逻辑。angularjs

与MVC不一样,来自view的调用将委托给presenter(表示器),表示器经过接口与view对话。浏览器

MVP中的view是被动的,里面包含一点代码逻辑或者零逻辑,咱们专业的说:这个view是很轻的。架构

MVP的原理:view进行请求,表示器执行任何与用户请求有关的工做,并将数据回送给它们。表示器检索数据而且操做数据,而且肯定应该如何在view中显示这些数据。model模型改变时,是表示器收到通知,而后更新view,所以表示器要订阅model。在这种模式中,没有直接数据绑定的概念了。mvc

具备很是复杂的view和大量用户交互的应用程序可能不适合MVC模式,由于这样会依赖多个控制器。可是在mvp中,全部这些复杂的逻辑能够封装在一个表示器中,这能够大大简化维护工做。mvvm

Backbone既能够理解成mvc模式,也能够理解成mvp模式,咱们暂且把backbone归结为mv*模式。接口

MVVM模式

模型-视图-视图模型是一种基于MV*的架构模式,它试图更清晰的将用户界面开发从应用程序的业务逻辑与行为中分离。事件

为此,不少这种模式的实现都要利用声明式数据绑定来实现将view工做从其余层分离。backbone

这有助于在同一个代码库中UI和开发工做的同时进行。UI开发人员在HTML编写中,编写与viewmodel的绑定,业务逻辑的开发人员编写model和viewmodel。开发

MVVM中的model同步

model保存着信息,可是一般不处理行为,它们不会格式化信息或影响数据在浏览器中显示的方式。数据格式化是由view来处理的,而行为被认为是业务逻辑,应该封装在与model交互的另外一层中viewmodel中。

MVVM中的view

view实际上仅仅是与用户进行交互的。可是MVVM中的view包含数据绑定,事件和行为,而且须要对viewmodel有了解。虽然,这些东西均可以被映射到属性中,但view仍然负责处理viewmodel的事件。

咱们要牢记:view并不负责处理状态,它仅仅是让状态与viewmodel保持同步。

MVVM中的viewmodel

能够将viewmodel做为一个专门的controller,它将model信息转变为view信息,同时还将命令从view传递到model。

view和viewmodel之间经过数据绑定和事件进行通讯。

view处理本身的用户界面事件,必要时将它们映射到viewmodel。

model和viewmodel上的属性经过双向数据绑定进行同步和更新。

viewmodel能够为了数据绑定而暴露model或model属性,也能够包含接口,用于获取和操做view中暴露的属性。

总结:mvp和mvvm都是mvc的衍生品。

在mvc中,view位于架构之上,与controller相邻,model位于controller之下,所以view了解controller,controller了解model。view能够直接访问model。

在mvp中,controller的做用被presenter所替代。表示器与view位于同一位置,表示器监听view和model的事件。

在mvvm中,咱们能够建立model特定于view的子集,也就是说,咱们无需向view暴露整个model。view能够绑定到viewmodel上的属性,而属性会将model所包含的数据暴露给view。

在咱们实际的开发中,是使用MV*模式的backbone仍是使用MVVM模式的angularjs,Backbone的优点在于它易于与RESTful服务相集成。而angularjs重点关注自动化UI绑定。我的发现angularjs更适用于小型应用程序,Backbone适合建立大型应用程序。可是仁者见仁智者见智,具体状况具体对待。

 

 

 

 

加油!

相关文章
相关标签/搜索