MVVM模式通过ViewModel实现view和model的低耦合
2015-05-13 11:36
363 查看
http://nerds.airbnb.com/airbnb-tablet/
Each of these representations would differ from tablet to phone, so instead
of having branching logic in place everywhere these objects were used, we decided to ask the model how it preferred to be displayed. We built a view-model protocol that allows us to ask any model object for its “default representation view controller.” The
model returns a fully allocated device-specific view controller to be displayed. At first, these view-model objects simply returned the phone view controller, but when we eventually started building the tablet version we simply had to change a single line
of code for the tablet view controllers to be displayed app-wide.
MVVM模式和MVC模式一样,主要目的是分离视图(View)和模型(Model),有几大优点
1. 低耦合。视图(View)可以独立于Model变化和修改,一个ViewModel可以绑定到不同的"View"上,当View变化的时候Model可以不变,当Model变化的时候View也可以不变。
2. 可重用性。你可以把一些视图逻辑放在一个ViewModel里面,让很多view重用这段视图逻辑。
3. 独立开发。开发人员可以专注于业务逻辑和数据的开发(ViewModel),设计人员可以专注于页面设计,使用Expression Blend可以很容易设计界面并生成xaml代码。
4. 可测试。界面素来是比较难于测试的,而现在测试可以针对ViewModel来写。
Each of these representations would differ from tablet to phone, so instead
of having branching logic in place everywhere these objects were used, we decided to ask the model how it preferred to be displayed. We built a view-model protocol that allows us to ask any model object for its “default representation view controller.” The
model returns a fully allocated device-specific view controller to be displayed. At first, these view-model objects simply returned the phone view controller, but when we eventually started building the tablet version we simply had to change a single line
of code for the tablet view controllers to be displayed app-wide.
MVVM模式和MVC模式一样,主要目的是分离视图(View)和模型(Model),有几大优点
1. 低耦合。视图(View)可以独立于Model变化和修改,一个ViewModel可以绑定到不同的"View"上,当View变化的时候Model可以不变,当Model变化的时候View也可以不变。
2. 可重用性。你可以把一些视图逻辑放在一个ViewModel里面,让很多view重用这段视图逻辑。
3. 独立开发。开发人员可以专注于业务逻辑和数据的开发(ViewModel),设计人员可以专注于页面设计,使用Expression Blend可以很容易设计界面并生成xaml代码。
4. 可测试。界面素来是比较难于测试的,而现在测试可以针对ViewModel来写。
相关文章推荐
- MVVM模式通过ViewModel实现view和model的低耦合
- MVVM模式解析和在WPF中的实现(五)View和ViewModel的通信
- MVVM模式的View与ViewModel的三大通讯方式:Binding Data(实现数据的传递)、Command(实现操作的调用)和Attached Behavior【转】
- [Silverlight入门系列]使用MVVM模式(7):ViewModel的INotifyPropertyChanged接口实现
- 转:[Silverlight入门系列]使用MVVM模式(9): 想在ViewModel中控制TreeView节点展开?
- 浅谈MVP与Model-View-ViewModel(MVVM)设计模式
- 探索MVP(Model-View-Presenter)设计模式在SharePoint平台下的实现
- 稳扎稳打Silverlight(58) - 4.0通信之WCF RIA Services: 通过 Domain Service, 以 MVVM 模式实现数据的添加、删除、修改和查询
- [Silverlight]通过MVVM模式实现本地化/全球化(1)
- WPF学习笔记:MVVM模式下,ViewModel如何关闭View?
- 在MVVMLight框架的ViewModel中实现NavigationService
- RoboBinding:一个实现了数据绑定 Presentation Model(MVVM) 模式的Android开源框架
- MVVM模式下,ViewModel和View,Model有什么区别
- 探索MVP(Model-View-Presenter)设计模式在SharePoint平台下的实现
- 用C#实现MVC(Model View Control)模式介绍
- 用C#实现MVC(Model View Control)模式介绍
- 稳扎稳打Silverlight(58) - 4.0通信之WCF RIA Services: 通过 Domain Service, 以 MVVM 模式实现数据的添加、删除、修改和查询
- (收藏)在ASP.NET中实现Model-View-Controller模式(一)
- 解决 通过继承QAbstractTableModel并实现headerData方法给QTableView添加标题时,标题不显示 的问题
- 浅谈MVP与Model-View-ViewModel(MVVM)设计模式