Android Databinding(二)

2015年12月24日

[TOC]

1、從MVP開始

MVP出現的前提就是減少了Activity的職責,簡化了Activity中的代碼,將復雜的邏輯代碼提取到了Presenter中進行處理。與之對應的好處就是,耦合度更低,更方便的進行單元測試。


MVP
MVP

1. 各部分之間的通信,都是雙向的。
2. View 與 Model 不發生聯系,都通過 Presenter 傳遞。
3. View 非常薄,不部署任何業務邏輯,稱為"被動視圖"(Passive View),即沒有任何主動性,而 Presenter非常厚,所有邏輯都部署在那里。

2、MVVM

說MVVM首先先提到標記語言,隨著20世紀初web的崛起,HTML跟JS這樣標記語言+程序語言的組合模式開始變得令人注目。逐漸推出的Flex、Sliverlight、QT、WPF、JSF、Cocoa等UI系統不約而同地選擇了標記語言來描述界面。
在這樣的架構中,view(或者說叫控件,不但是從依賴關系上跟程序的其他部件解耦,而且從語言上跟其它部分隔離開來)
然而這樣的系統架構中,MVC和MVP模式已經不能很好地適用了。微軟架構師John Gossman在WPF的XAML模式推出的同時,提出了MVVM的概念。


MVP
MVP

在安卓開發中,layout文件是靜態的,只能通過代碼進行修改,大量的事件綁定和finViewById以及視圖的邏輯充斥在Activity中,使Acticity顯得特別胖。

MVP雖然在一定程度上解決了Acticity代碼量龐大,實現視圖邏輯和視圖操作的解耦,但是他們還是需要大量的代碼對layout進行設置屬性,比如說ImageView的setImageBitmap或者TextView的setText,顯得特別啰嗦也很容易出錯

但是而在安卓的Databinding中,把一個layout里面的控件的某些屬性綁定對應的bean,把操作的控件看成bean對象,只需要對layout綁定的bean進行修改之后,layout就會隨之改變。

這里的bean就是MVVM中的Model,那么對bean進行邏輯處理的就是VM(ViewModel),這樣我們主需要關心M和VM之間的交互了。但是,還不能是實現雙向綁定,比如說,對一個EditText的text屬性綁定一個bean的屬性,那么對EditText修改之后他的bean不會隨之變化,當然可以自定義屬性解決這個問題。

下面就是layout

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <!-- 配置變量,name字段為下面想要引用的類,type為全類名,
    AS中快捷鍵ctrl+shift+alt+c -->
    <data>
        <import type="com.znke.hellodatabinding.test1.Person"/>
        <variable
            name="person"
            type="Person"/>
    </data>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
        <!-- 需要填充的字段用@{}表示 -->
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textSize="25sp"
            android:text="@{person.name}"
            />
    </LinearLayout>
</layout>

一個布局文件就是一個ViewBinding對象,它包含了這個布局里面所有View和變量:

ActivityRecyclerviewBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_recyclerview);

注意,ActivityRecyclerviewBinding是系統自動生成的

然后看一下MVVM的示意圖

MVVM
MVVM

MVVM是MVP的升級版,只是把presenter變成了ViewModel,并且MVVM支持綁定。

Demo地址

參考博文

MVC,MVP 和 MVVM 的圖示
談談UI架構設計的演化

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容