关于android中的MVVM模式,你须知道的事情

泡在网上的日子 / 文 发表于2015-06-02 02:07 次阅读 MVVM

英文原文: http://www.willowtreeapps.com/blog/mvvm-on-android-what-you-need-to-know/ 

今年的I/O大会上谷歌介绍了一个非常牛逼的新框架,该框架可以让你将view和一个对象的对field绑定。当field更新的时候,framework将收到通知,同时view也会自动更新。


这种机制非常强大,让我们得以使用一种在Windows上已经使用多年的开发模式-Model-View-ViewModel (MVVM)。在开始编码之前,了解关于这种模式的的基本概念以及对app的好处也是很重要的。


MVVM模式包含了三个部分:

  • Model – 代表你的基本业务逻辑

  • View – 显示内容

  • ViewModel – 将前面两者联系在一起的对象


一个ViewModel接口提供了两个东西:动作和数据。动作改变Model的下层(click listener,监听文字改变的listener等等),而数据则是Model的内容。

比如,为一个拍卖页面服务的ViewModel可能被作为数据呈现:item里的一张图片,标题,描述,价格。也可能作为动作呈现:投标,购买或者联系卖家。


在传统的安卓架构中,controller负责推送数据给view。在Activity中findview,然后在它上面设置内容。在MVVM中,ViewModel在改变内容之后通知binding framework内容发生了改变。然后framework自动更新和那些内容绑定的view。这两个组建只是通过ViewModel松耦合在一起。


这种设计模式之所以牛逼,除了明显智能化了的View之外,还方便了测试。


因为ViewModel不在依赖于View了,你可以在没有View的情况下也能测试ViewModel。在合适的依赖注入的帮助下,测试就会变得非常简单。


比如,在一个测试用例中,我们不将VM和一个真实的View绑定,而是直接创建一个VM,给它一些数据,然后在上面调用操作,以确保数据的变化是正确的。比如刚刚的拍卖案例中,你可以创建一个带虚拟(模拟的)API服务的VM

,让它载入任意的item然后在上面调用拍卖的行为,以确认结果数据是正确的。所有这些工作都不必和一个具体的View交互。


而在测试view的时候,我们可以创建一系列带有预先设置好数据(比如依赖于网络调用的或者数据库内容的)的模拟model,然后观察在不同的数据集合面前view是如何表现的。


希望这篇文章能让你对MVVM模式有个更好的理解,后面的文章中我们将指出实现这种模式的一些细节问题,以及binding framework的要点和技巧。


收藏 赞 (16) 踩 (25)
上一篇:Filter DropDownMenu---带过滤功能的下拉菜单
转自: chenfuduo.me 效果还是很不错的,要是封装一下就更好了。 带过滤功能的下拉菜单在美团网移动端,腾讯课堂移动端都可以看到,本篇就是实现这个功能。 效果图 1 分析 从上面的效果图中可以看出,我们可以这样做: 自定义顶部的每一个按钮(DropDownButto
下一篇:如何在使用安卓数据绑定(Data Binding)的时候使用动画
安卓上新的binding framework可以轻松实现视图根据model改变而更新。你只需要让model能被观测,然后framework将做好其余的事情。比如,你可以通过下面的代码来实现一个加载提示的显示和隐藏: ProgressBarandroid:layout_width=wrap_contentandroid:layout_h