中三A105论坛

注册 登录
查看: 955|回复: 0

Android架构设计模式总结(MVX)

[复制链接]

2

主题

3

帖子

16

积分

新手上路

Rank: 1

积分
16
发表于 2019-10-8 10:58:59 | 显示全部楼层 |阅读模式
Android架构设计模式总结(MVX)
一、安卓软件架构设计的目的通过设计使程序模块化,做到模块内部的高聚合和模块之间的低耦合。这样做的好处是使得程序在开发的过程中,开发人员只需要专注于一点,提高程序开发的效率,并且更容易进行后续的测试以及定位问题。但设计不能违背目的,对于不同量级的工程,具体架构的实现方式必然是不同的,切忌犯为了设计而设计,为了架构而架构的毛病。

举个简单的例子:
一个Android App如果只有3个Java文件,那只需要做点模块和层次的划分就可以,引入框架或者架构反而提高了工作量,降低了生产力;
但如果当前开发的App最终代码量在10W行以上,本地需要进行复杂操作,同时也需要考虑到与其余的Android开发者以及后台开发人员之间的同步配合,那就需要在架构上进行一些思考!

二、MVC、MVP、MVVM架构设计模式的联系与区别

1.MVC(单向循环,每一层都做两件事,先接受命令再通知)
什么是MVC?
MVC:Model View Controller,是软件架构中最常见的一种框架
View :对应于布局,一般采用xml文件进行界面描述;
Model:对应于Android中的databases、实体类等,负责业务逻辑的处理和实体模型;
Controllor:对应于Activity与Fragment,处理数据、业务和UI
特点:
View与Model直接交互。
Controller是基于行为的,并且可以被多个View共享
原理:
当用户触发事件的时候,View层会发指令到Controller层,接着Controller去通知Model层更新数据,Model层更新完数据以后直接现在在View层上。

2.MVP

什么是MVP?
在实际运用中人们发现View和Model之间的依赖还是太强,希望他们可以绝对独立的存在,慢慢的就演化出了MVP,Presenter 替换掉了Controller,不仅仅处理逻辑部分,而且还控制着View的刷新,监听Model层的数据变化。这样隔离掉View和Model的关系后使得View层变的非常的薄,没有任何的逻辑部分又不用主动监听数据,被称之为“被动视图”。
View:
对应于Activity和XML文件,负责View的绘制以及与用户交互
Model:
依然是业务逻辑和实体模型
Present:
负责完成View于Model间的交互和业务逻辑,不仅负责业务处理还控制着view的刷新
特点:
View不直接与Model交互,而是通过与Presenter交互来与Model间接交互。
Presenter与View的交互是通过接口来进行的。
通常View与Presenter是一对一的,但复杂的View可能绑定多个Presenter来处理逻辑。
原理:
举个简单的例子,UI层通知逻辑层(Presenter)用户点击了一个Button,逻辑层(Presenter)自己决定应该用什么行为进行响应,该找哪
个模型(Model)去做这件事,最后逻辑层(Presenter)将完成的结果更新到UI层。


3、MVVM说到Android MVVM,相信大家都会想到Google 2015年推出的DataBinding框架。然而两者的概念是不一样的,不能混为一谈。MVVM是一种架构模式,而DataBinding是一个实现数据和UI绑定的框架,是构建MVVM模式的一个工具。
Model:代表你的基本业务逻辑和实体模型,也就是数据源
View:对应于Activity和XML,负责View的绘制以及与用户交互,显示内容
ViewModel:ViewModel是Model和View的中介,负责处理视图逻辑。通常,ViewModel通过调用Model中的方法与Model交互。然后,ViewModel以一种View很容易地使用的形式提供来自Model的数据。ViewModel从模型中检索数据并将数据提
特点:

低耦合 。 视图(View)可以独立于Model变化和修改,一个ViewModel可以绑定到不同的"View"上,当View变化的时候Model可以不变,当Model变化的时候View也可以不变。
可重用性 。 你可以把一些视图逻辑放在一个ViewModel里面,让很多view重用这段视图逻辑。
独立开发 。 开发人员可以专注于业务逻辑和数据的开发(ViewModel),设计人员可以专注于页面设计。
可测试 。 界面素来是比较难于测试的,而现在测试可以针对ViewModel来写
原理:
Android中MVVM的实现要借助Google提出的DataBinding库实现。首先viewmodel与view层通过DataBinding双向绑定,一个更新另一个也跟着更新。model提供数据,viewmodel通过model提供的接口方法进行数据操作,并在view层显示出
具体实现1、添加DataBinding的依赖–在app级的module中添加
//绑定DataBinding库dataBinding {enabled true}


2、布局实现上的区别–根标签是layout,在中添加变量
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
    <variable
        name="user2"
        type="com.metashipanwf.mvvmtest.model.User2" />
</data>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    androidrientation="horizontal"
    android:padding="10dp">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@{user.firstName}" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@{user.lastName}" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text='@{user.age+""}' />
</LinearLayout>
</layout>

3、添加如上布局之后自动生成binding类,在布局对应的activity中绑定数据
public class MainActivity extends AppCompatActivity {
  private ActivityMainBinding binding;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
          User user = new User("Micheal", "Jack");
          binding.setUser(user);
  }
}






回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回列表 返回顶部