zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    『Asp.Net 组件』第一个 Asp.Net 服务器组件:自己的文本框控件
    『Asp.Net 组件』Asp.Net 服务器组件 的开发优势和劣势
    『开源』简单的代码统计工具 开源啦[有图有真相]
    文件中的类都不能进行设计,因此未能为该文件显示设计器。设计器检查出文件中有以下类: FormMain --- 未能加载基类
    DB2:FETCH FIRST 1 ROWS ONLY
    IEnumerable的几个简单用法
    一个字符串中包含逗号个数
    字符串处理总结之一(C#String类)
    C# 中DateTime的各种使用
    C# 键值对类相关
  • 原文地址:https://www.cnblogs.com/CharlesGrant/p/4721622.html
Copyright © 2011-2022 走看看