在搭建新项目的过程中,调研了一些常用的开发框架,恰好近日Google公布了一系列框架的梳理(未完成),对Android开发者给出了一些指导,颇有裨益。总结了如下几种模式:

  1. 纯MVP开发
  2. MVP+Loader
  3. MVP+Databinding
  4. MVP+ContentProvider
  5. MVP+Dagger
  6. MVP+Clean构架

总体而言,基本涵盖了Android中的流行的开发构架方式。这些开发框架是以MVP为基础,再结合其他工具,或者再次细分某些层,实现更好的复用。这里首先简介一下MVP,然后将上述6个框架按照我的理解(可能不完备)进行归类总结。

MVP分析

MVP是上述六个框架的基础,对于MVP的认识,最好结合MVC、MVVM这两个框架进行学习,一个基本的理解参考阮一峰先生的这篇文章
我总结几点:

构架分析

MVP+Loader/MVP+ContentProvider

这两个构架都是在P层与数据M层之间进行优化,主要优化了P层从M层获取数据的方式,使用Android原生(3.0开始)提供的Loader异步加载机制,从数据库/网络等地方加载数据。CotentProvider思想类似,使用了CotentProvider方式,分离数据部分,实现解耦。

MVP+Databinding

这个框架可以看着是MVVM框架了。Databinding是利用Android提供的一个库实现了数据绑定的功能,即某个Entity内容可以直接反应到View中,同样View一旦修改,Entity也会变换。本质上,这种方式简化了MVP中P层与V层的关系,P层处理完的数据,放入某个实体中就可以显示在界面上。当然也有其缺陷。

MVP+Dagger

这就比较好理解了,将MVP中对象的构造使用Dagger2代替,是一种强制性解耦的措施,具体可以参加之前的文章

MVP+Clean构架

这里主要讲解一下Clean构架,什么是Clean构架,这在网上有很多介绍的文章,其实就是一种基于MVP再次分层的构架,历史比较悠久了(2012年?)。下面详细介绍。

Clean学习

基本的学习看Clean构架的文章:

Clean基本思想

总结一下Clean的基本思想:
首先,我们应该从MVP出发理解Clean构架
Clean构架中,把整个项目分成3个模块,presentation(表现层),domain(领域层),data(数据层)。

Clean的数据流

presentation(V)--> presentation(P)--> domain(usecase) -->data-->domain(usecase,数据回调)--> presentation(P,结果回调) -->presentation(V,P调用V的UIController接口)

几个注意点与疑惑

总结

上面介绍了Google推荐了几种构架,主要说明了MVP与Clean构架。基本上MVP是现在项目的标配,虽然Clean清晰,可维护性高,可复用性强,但是是否使用Clean,则看具体情况,也可能对其适当的简化后使用。
这里Clean构架的demo是一个比较高级的样例,综合了Rxjava,Dagger2,OkHttp/Retrofit。混合使用这些技术学习曲线还是比较陡峭的,在实际的构架中,综合团队人员水平,往往用接口代替Rxjava,不使用Dagger2。
其次,Clean构架可能显得臃肿,尤其实际中业务逻辑复用的程度并不高,所以,我们需要简化Clean构架以符合我们的业务需求。