Android MVVM框架RoboBinding初探

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:

 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2
 3     xmlns:tools="http://schemas.android.com/tools"
 4
 5     xmlns:bind="http://robobinding.org/android">
 6
 7     <TextView
 8
 9         bind:text="{hello}" />
10
11         ...
12
13     <Button
14
15         android:text="Say Hello"
16
17         bind:onClick="sayHello"/>
18
19 </LinearLayout>

Presentation Model:

 1 public class PresentationModel extends AbstractPresentationModel {
 2
 3     private String name;
 4
 5     public String getHello() {
 6
 7         return name + ": hello Android MVVM(Presentation Model)!";
 8
 9     }
10
11     ...
12
13     public void sayHello() {
14
15         firePropertyChange("hello");
16
17     }
18
19 }

Activity将layout与对应的presentation model绑定在一起。

 1 public class MainActivity extends Activity {
 2
 3     @Override
 4
 5     protected void onCreate(Bundle savedInstanceState) {
 6
 7         ...
 8
 9         PresentationModel presentationModel = new PresentationModel();
10
11         View rootView = Binders.inflateAndBindWithoutPreInitializingViews(this, R.layout.activity_main, presentationModel);
12
13         setContentView(rootView);
14
15     }
16
17 }

这样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

时间: 2024-08-11 20:56:01

Android MVVM框架RoboBinding初探的相关文章

Android进阶笔记14:RoboBinding(实现了数据绑定 Presentation Model(MVVM) 模式的Android开源框架)

1.RoboBinding RoboBinding是一个实现了数据绑定 Presentation Model(MVVM) 模式的Android开源框架.从简单的角度看,他移除了如addXXListener(),findViewById()这些不必要的代码,连如BufferKnife那样的InjectView都不需要,因为你的代码一般不需要依赖于这些界面组件信息.下面以一个最简单的AndroidMVVM为例. (1)layout 布局 <LinearLayout xmlns:android="

Android官方MVVM框架实现组件化之整体结构

一.google官方MVVM框架讲解 我前面对比了MVC和MVP<两张图看懂Android开发中MVC与MVP的区别>,可以相对于MVC我们的MVP是有多优越,但是Android开发现在已经开始流行了MVVM,前不久google官方发布了MVVM的正式库.官方的正式MVVM库主要包括下面四个: 其中只有ViewModel是MVVM结构中的一个组件,其他的三个都是辅助性质的. lifecycles 就是处理UI界面的生命周期,在26版本以后的Support库中,AppCompatActivity

Swift教程17-淡化MVC,使用MVVM框架开发轻巧便于维护的iOS/android app

MVVM是微软提出一种移动开发框架,旨在针对传统的MVC框架,解决传统的MVC框架的控制器的臃肿问题. M: Model模型,也就是数据模型;比如一条微博,对应的所有字段合成一条微博整体,这个整体就是Model V: View视图,只用来显示的视图,如 iOS的UIView,Cell;当然在 iOS中 Storyboard中,view总是和控制器关联,这并不是严格的view 如果我们纯手写代码定义一个view那么就是一个比较严格的view了 VM: ViewModel视图模型,是将一个 View

使用MVVM框架(avalonJS)快速开发运营活动

背景 在运营活动开发中,因为工作的重复性很大,同时往往开发时间短,某些情况下也会非常紧急,导致了活动开发时间被大大压缩,同时有些活动逻辑复杂,数据或者状态变更都需要手动渲染,容易出错,正是因为这些问题的存在,所以才有了MV*框架的诞生,比如大名鼎鼎的angularJS.今天就跟大家讲讲国产的MVVM框架avalonJS是如何快速进行开发的,同时大家也可以对比石器时代的开发模式(jquery或者zepto)与mv*模式的区别. avalonJS简介 avalonJS是前端大牛司徒正美开发和维护的m

Android MVVM

原文地址 http://tech.vg.no/2015/07/17/android-databinding-goodbye-presenter-hello-viewmodel/ 1.Android DataBinding:再见MVP,你好MVVM 当我们谈到android应用程序的架构模式时,MVP一直是占主流的地位.就像 Ted Mosby, Nucleus and Mortar 框架都是用Presenters 架构,使我们的app结构变得非常清晰,还帮助我们解决一个凑名昭着的问题:andro

Android开源框架 Android-Universal-Image-Loader

Android开源框架Universal-Image-Loader就像图片加载守护者,为我们提供了丰富的功能特性: (1)多线程加载图像(异步或同步): (2)高度可定制化imageloader配置(线程池.图片下载器.解码器.内存和磁盘缓存.显示图像选项等): (3)每一个显示图像有许多自定义选项(存根图片,缓存开关,解码选项,位图处理和显示等): (4)支持内存和磁盘上的图像缓存(设备的文件系统和SD卡): (5)监听加载过程(包括下载进度): 下来我们详解如何配置使用Universal-I

android多媒体框架学习 详解 最新版本

一:多媒体框架概述   jellybean 的多媒体跟以前的版本,通过对比没啥变化,最大的变化是google终于舍得给multimedia建个独立的git了(framework/av),等你好久了!也体现了media 在整个android系统中的重要性!framework/av下都是些C/C++代码(libmedia,libmediaplayerservice,libstagefright),jni和 java api 还是保留在原来的位置,改革还不够彻底,但还是迈出了这一步,以后维护能更好的进

android系统启动框架、Activity界面显示过程详解

一.Android系统框架 android的系统架构和其操作系统一样,采用了分层的架构.从架构图看,android分为四个层,从高层到低层分别是应用程序层.应用程序框架层.系统运行库层和linux核心层.盗图如下: 具体每层的功能介绍如下: (1) 应用程序层 该层提供一些核心应用程序包,例如电子邮件.短信.日历.地图.浏览器和联系人管理等.同时,开发者可以利用Java语言设计和编写属于自己的应用程序,而这些程序与那些核心应用程序彼此平等.友好共处. (2)应用程序框架层 该层是Android应

android studio NDK 开发初探

android studio NDK 开发初探 环境配置 1)下载ndk 2)在android studio中配置ndk 路径 3)配置gradle 在gradle.properties中加入 android.useDeprecatedNdk=true配置 开启ndk 在开发过程中我们有时还会用到c++中到stl库这时我们就需要在build.gradle 中加入 defaultConfig { ndk { moduleName "jnitest" stl "stlport_s