概述
Android架构设计模式总结(MVX)
hongyang关于MVP
郭霖MVP
一、安卓软件架构设计的目的
通过设计使程序模块化,做到模块内部的高聚合和模块之间的低耦合。这样做的好处是使得程序在开发的过程中,开发人员只需要专注于一点,提高程序开发的效率,并且更容易进行后续的测试以及定位问题。但设计不能违背目的,对于不同量级的工程,具体架构的实现方式必然是不同的,切忌犯为了设计而设计,为了架构而架构的毛病。
举个简单的例子:
一个Android App如果只有3个Java文件,那只需要做点模块和层次的划分就可以,引入框架或者架构反而提高了工作量,降低了生产力;
但如果当前开发的App最终代码量在10W行以上,本地需要进行复杂操作,同时也需要考虑到与其余的Android开发者以及后台开发人员之间的同步配合,那就需要在架构上进行一些思考!
二、MVC、MVP、MVVM架构设计模式的联系与区别
1、MVC(单向循环,每一层都做两件事,先接受命令再通知)
什么是MVC?
MVC:Model View Controller,是软件架构中最常见的一种框架
View:对应于布局文件,一般采用XML文件进行界面的描述
Model:对应于安卓中的database、实体类等,负责业务逻辑的处理和实体模型;
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: 依然是业务逻辑和实体模型
Presenter: 负责完成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"
android:orientation="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);
}
}
三、参考网址
http://cache.baiducontent.com/c?m=9f65cb4a8c8507ed4fece763105392230e54f7636d918d027fa3c215cc7902155a66e1b823201619d4c77d610aad5e5c9daa702d691765eadb9e875dadb985582f9f5131676cf25613a346eb8f1932c050872a98b86f96ad803984ded9c4de2444bc57120c82e78a2a1765cb78806026e2d68e3e154860cafa3115e829773ee82257b737ee9037797686e1dc2c5bb259c7111180de34a74e14&p=ce759a45d5c100fc57efc8265048bb&newp=c662c31286cc41ac5ab2d62d0214cd231610db2151d4d201298ffe0cc4241a1a1a3aecbf26281100d3c47b6202a8495ae8f03273330834f1f689df08d2ecce7e70ca&user=baidu&fm=sc&query=%B0%B2%D7%BFmvvm%BC%DC%B9%B9%D6%D0%C3%BF%D2%BB%B2%E3%B7%C5%CA%B2%C3%B4%A1%A2&qid=d9f8ec8900001a0d&p1=4
http://blog.csdn.net/zh394759565/article/details/51613831
http://mp.weixin.qq.com/s?__biz=MjM5NDkxMTgyNw==&mid=405212572&idx=1&sn=e2a84186dccc7661e0644feb38d74f8c&scene=21#wechat_redirect
http://tech.meituan.com/android_mvvm.html
微软解释
DataBinding
郭霖关于mvvm的解读
四、其他网站
1、用 Retrofit 2 简化 HTTP 请求
2、RxJava详解
3、完全掌握Android Data Binding
4、mvvm
5、Android APK反编译就这么简单 详解(附图)
最后
以上就是怕黑发带为你收集整理的Android架构设计模式总结(MVX)三、参考网址四、其他网站的全部内容,希望文章能够帮你解决Android架构设计模式总结(MVX)三、参考网址四、其他网站所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复