Android框架模式

参考大佬写的文章:https://www.jianshu.com/p/f17f5d981de7

1、MVC模式

Model:模型层,根据业务模型建立相关的数据类,同时相关的数据库操作和网络也在Model中进行。
View:视图层,一般用xml文件描述,用于view的展示
Controller:控制层,负责逻辑业务的处理;连接View层和Model层,完成View层和Model层的交互。

这么说太抽象了,我们举个栗子:

点击按钮数字增加
Model层就是数字的保存和更新,更新通知的是Activity,View层就是对应布局的xml文件,Activity充当Controller层,它接收view层的点击,然后通知model层你该增加了。
大佬的图特别直观:

  • 优点
    View层和Model层解耦,通过Controller层来进行联系
    职责划分明确,有利于代码的维护
  • 缺点
    Activity除了要连接View层(加载布局、接受用户操作),还要承担Controller层的职责(业务逻辑的处理)。它和View,Model层是有交互的,并没有做到完全分离,会产生耦合。
    界面变多或者逻辑太复杂,Activity会不堪重负。

说了这么多可能反而一脸懵,在我认为MVC模式就是:
我们平时随便写代码保证程序能够正常运行的时候不可避免的要写xml文件(这个就是view层),程序中的一些增删改查操作还有实体类的定义操作(这个是Model),Activity中不可避免的要承担view层的加载和一些逻辑处理操作(这个是Controller层)。尽管我们会写一些封装,定义一些接口抽象类,遵循设计模式实现的六大基本原则来进行解耦,但是还是限制在MVC这个最大的框框里面进行的。

2、MVP模式

2.1 粗窥MVP

为了分离Activity中的View层和Controller层,又进一步对Activity做了瘦身。

Model:模型层,负责存储、检索、操纵数据。
View:视图层,负责界面数据的展示,与用户进行交互。
Presenter:呈现层,连接View层和Model层,处理业务逻辑。

我们还是举这个例子:
点击按钮数字增加
Model负责数据的保存和更新,更是通知的是Presenter。(在MVC模式中通知的是Activity,也就是Controller,但是在Actvity中还是和View发生了交互,而这里不会)
View层是Activity,同时持有Presenter的引用。
Presenter层是接口,负责业务逻辑处理。

  • 优点
    ① 通过Presenter实现数据与视图之间的交互,完全隔离了View层和Model层。
    ② 对Activity成功进行了瘦身。

2.2 MVC和MVP模式的区别

MVP模式的缺点:写过MVP项目就会发现,为了实现这个架构,我们封装了太多的接口,可读性太差。

3、MVVM模式

3.1 粗窥MVVM

Model:模型层,负责处理数据的加载或存储。
View:视图层,负责界面数据的展示,与用户进行交互。
ViewModel:视图模型,负责完成View于Model间的交互,负责业务逻辑。

这三种模式的定义都差不多,但是它的内部实现不一样。

  • 优点
    Model层和View层耦合进一步降低
  • 缺点
    程序难以调试,界面出现异常时,可能是View的问题,也肯是Model的问题,定位出异常比较困难。

3.2 MVVM和MVP的区别

我们可以看到MVVM和MVP都实现了View层和Model层的完全分离,MVVM的不同之处在于Model和View进行双向绑定:当View发生改变时,ViewModel通知Model更新数据;当Model数据更新后,ViewModel通知View进行更新。

3.3 MVVM的动态绑定

MVVM和MVP主要的区别就是动态绑定,这就不得不提一下DataBinding方式实现动态绑定和LiveData+ViewModel来实现双向绑定了。

DataBinding是什么东西,它是一共MVVM的支持库,帮助我们进行MVVM架构的搭建,它提供了一些Model和View双向绑定的逻辑,通过DataBinding库我们可以快速搭建MVVM架构。
后来出现了LiveData+ViewModel来实现双向绑定,相比而已它好用了很多,和DataBinding相比不仅没有xml文件的侵入引发一系列问题,在学习成本和实际实现中也远远优于DataBinding.
郭神也曾写过LiveData+ViewModel实现MVVM架构的实例,我们可以拿来参考 https://github.com/guolindev/coolweatherjetpack
这届话事人我挺MVVM。



深入理解这几种架构的实现和区别请参考https://blog.51cto.com/u_10125763/3697579
posted @ 2020-02-15 13:15  我的小鱼干嘞  阅读(195)  评论(0编辑  收藏  举报