Android MVVM框架RoboBinding初探

  • Post author:
  • Post category:其他





今年在HTML5开发中使用AngularJS框架,觉得MVVM的框架太方便了,双向绑定机制省去了很多繁琐的工作,于是想在新的Android项目也引入类似的MVVM框架,提高团队的开发效率和代码的工程化程度,然后就找到了

RoboBinding这个框架,简单看了下感觉应该还算靠谱。






RoboBinding是一个实现了数据绑定


Presentation Model


(


MVVM


) 模式的Android开源框架。MVVM模式是MVC模式的重要更新,使得项目结构更加的优美,易于维护以及方便于测试。这也是为什么几个主流的语言都有相应的MVVM框架实现如


Microsfot 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:

1
2
3
4
5
6
7
8
9
10

<


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:

1
2
3
4
5
6
7
8
9
10

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绑定在一起。

1
2
3
4
5
6
7
8
9

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



版权声明:本文为offbye原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。