Android MVVM框架RoboBinding初探
2015-08-11 17:22
501 查看
RoboBinding是一个实现了数据绑定 Presentation Model(MVVM) 模式的Android开源框架。MVVM模式是MVC模式的重要更新,使得项目结构更加的优美,易于维护以及方便于测试。这也是为什么几个主流的语言都有相应的MVVM框架实现如windows phone,WPF,Silverlight,JavaFX以及Flex。
在没有性能损失的前提下(使用AspectJ字节码生成来替代Java反射),RoboBinding 帮助你编写更可读,易于测试与维护的UI代码。框架具备以下优点:
通过绑定移除 - 大量不必要的代码(如addXXListener(),findViewById()等) 。
将 - 难于测试的Android代码以及运行过久且不切实际的Android单元测试 - 变为 pojo PresentationModels 及其普通的JUnit单元测试。
提供对象类型Cursor来替换 - 关系类型Cursor,因为我们已经习惯于操作对象 。
可以很容易的为任何自定义组件,第三方组件或Android widget编写属性绑定实现,简化代码,使项目易于维护。
从简单的角度看,他移除了如addXXListener(),findViewById()这些不必要的代码,连如BufferKnife那样的InjectView都不需要,因为你的代码一般不需要依赖于这些界面组件信息。下面以一个最简单的AndroidMVVM为例。
Layout:
Presentation Model:
Activity将layout与对应的presentation model绑定在一起。
这样layout的{hello}与PresentationModel.hello绑定,layout的sayHello与PresenationModel.sayHello方法绑定。我们不需要在Layout中定义TextView, Button的Id因为我们不关心,且没有必要。当我们进一步观察时,我们发现PresentationModel是一个Pure POJO。这也是为什么软件界的泰斗Martin Fowler在2004年,提出了Presenation Model(MVVM) 模式。它是我们所熟悉的MVC的升级,进一步的把界面状态与逻辑解藕到Presentation Model中。我们可以通过以下几个示例项目学习RoboBinding使用,他们都可以直接导入Android Studio无需额外配置:
1.AndroidMVVM,最小的RoboBinding使用例子。
2.Album Sample,是Martin Fowler的Presentation Model模式原始例子基于RoboBinding的Android翻译版本。
3.Gallery,是用于展示RoboBinding的各种特性的使用包含Fragment, Menu, ViewPager等。
项目的中文文档地址是:http://robobinding.github.io/RoboBinding/index.zh.html
项目主页:http://www.open-open.com/lib/view/home/1410667351476
在没有性能损失的前提下(使用AspectJ字节码生成来替代Java反射),RoboBinding 帮助你编写更可读,易于测试与维护的UI代码。框架具备以下优点:
通过绑定移除 - 大量不必要的代码(如addXXListener(),findViewById()等) 。
将 - 难于测试的Android代码以及运行过久且不切实际的Android单元测试 - 变为 pojo PresentationModels 及其普通的JUnit单元测试。
提供对象类型Cursor来替换 - 关系类型Cursor,因为我们已经习惯于操作对象 。
可以很容易的为任何自定义组件,第三方组件或Android widget编写属性绑定实现,简化代码,使项目易于维护。
从简单的角度看,他移除了如addXXListener(),findViewById()这些不必要的代码,连如BufferKnife那样的InjectView都不需要,因为你的代码一般不需要依赖于这些界面组件信息。下面以一个最简单的AndroidMVVM为例。
Layout:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:bind="http://robobinding.org/android"> <TextView bind:text="{hello}" /> ... <Button android:text="Say Hello" bind:onClick="sayHello"/> </LinearLayout>
Presentation Model:
public class PresentationModel extends AbstractPresentationModel { private String name; public String getHello() { return name + ": hello Android MVVM(Presentation Model)!"; } ... public void sayHello() { firePropertyChange("hello"); } }
Activity将layout与对应的presentation model绑定在一起。
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { ... PresentationModel presentationModel = new PresentationModel(); View rootView = Binders.inflateAndBindWithoutPreInitializingViews(this, R.layout.activity_main, presentationModel); setContentView(rootView); } }
这样layout的{hello}与PresentationModel.hello绑定,layout的sayHello与PresenationModel.sayHello方法绑定。我们不需要在Layout中定义TextView, Button的Id因为我们不关心,且没有必要。当我们进一步观察时,我们发现PresentationModel是一个Pure POJO。这也是为什么软件界的泰斗Martin Fowler在2004年,提出了Presenation Model(MVVM) 模式。它是我们所熟悉的MVC的升级,进一步的把界面状态与逻辑解藕到Presentation Model中。我们可以通过以下几个示例项目学习RoboBinding使用,他们都可以直接导入Android Studio无需额外配置:
1.AndroidMVVM,最小的RoboBinding使用例子。
2.Album Sample,是Martin Fowler的Presentation Model模式原始例子基于RoboBinding的Android翻译版本。
3.Gallery,是用于展示RoboBinding的各种特性的使用包含Fragment, Menu, ViewPager等。
项目的中文文档地址是:http://robobinding.github.io/RoboBinding/index.zh.html
项目主页:http://www.open-open.com/lib/view/home/1410667351476
相关文章推荐
- Android之Inflate()方法用途
- Android实例-使用电话拨号器在移动设备上(官方)(XE8+小米2)
- 【Android进阶篇】Fragment的两种加载方式
- android与js交互(一)
- 【Android源码解析】 自定义可清除的输入框
- AsyncTask执行顺序
- Android R文件丢失生成失败
- 初入android驱动之字符设备(三)
- 最美应用-从Android研发工程师的角度之[最美时光]
- android媒体--图库与API层MediaPlayer的交互
- Android开发者必知的5个开源库
- android--intent
- Android Unable to instantiate activity ComponentInfo 基本入门 短信 轰炸机 项目 解析
- How to use Genymotion (High performance Android Emulator)
- Android-加速传感器或者OrientationEventListener做横竖屏切换
- android--gradle编译龟速?offline!
- android--handler
- android studio手动加入jar包
- android解析json
- 安卓状态栏通知Notification方法更新(setLatestEventInfo)