RoboBinding是一个实现了数据绑定 Presentation Model(MVVM) 模式的Android开源框架。MVVM模式是MVC模式的重要更新,使得项目结构更加的优美,易于维护以及方便于测试。这也是为什么几个主流的语言都有相应的MVVM框架实现如windows phone,WPFSilverlight,JavaFX以及Flex。

在没有性能损失的前提下(使用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

最新文章

  1. UVa12633 Super Rooks on Chessboard(容斥 + FFT)
  2. [转]YII2 常用数据库操作
  3. {&quot;集合已修改;可能无法执行枚举操作。&quot;}
  4. 伪命题:PHP识别url重写请求
  5. Ubuntu 14.10 下grep命令详解
  6. PHP过滤HTML标签的三种方法
  7. [javascript|基本概念|一元操作符]学习笔记
  8. rolling hash
  9. linux ps查看进程命令
  10. 26.单片机中利用定时器中断,在主流程while(1){}中设置每隔精确时间计量
  11. JS-Date日期内置对象
  12. TMemoryStream、String与OleVariant互转
  13. 老李分享:接口测试之jmeter
  14. Jquery DataTables 使用AJAX POST的问题
  15. python中List添加、删除元素的几种方法
  16. postgresql事务
  17. Pytorch复现Faster-RCNN
  18. python系统编程(十二)
  19. jenkins+sonarQube代码质量扫描 并排除指定的目录
  20. WordPress研究心得

热门文章

  1. [Educational Codeforces Round 16]B. Optimal Point on a Line
  2. 深度学习入门教程UFLDL学习实验笔记二:使用向量化对MNIST数据集做稀疏自编码
  3. Linux的watch命令 — 实时监测命令的运行结果
  4. linux shell 字符串操作(长度,查找,替换)详解
  5. 如何使用setup.py文件
  6. 基础知识《零》---Java程序运行机制及运行过程
  7. Unique Paths | &amp; ||
  8. canvas实践小实例二 —— 扇形
  9. codeforces 479C Exams 解题报告
  10. curl请求的url中含有空格