0、背景:
最近公司项目要求进行架构重构,从mvc转到mvp模式。我便自己动手研究了一下mvp设计模式,结合dagger2进行解耦。
1、架构设计:
mvc设计模式:m、v、c三层之间互相关联,但是都是单向通信。
优点:快速,容易上手,需要什么东西就创建什么东西,适合前期快速开发,单人开发。
缺点:耦合度高,类与类之间你中有我,我中有你,不利于后期维护,多人开发会变得很麻烦。
mvp设计模式:m与v层没有任何关联,数据和视图完全的解耦,两者只和p层通信,而且是双向通信。
优点:对比mvc降低了耦合度,但依然存在耦合(所以可以配合dagger2进行解耦),适合多人开发,后期维护方便。
缺点:需要创建大量接口,代码实现过程繁琐。
总结:
从最初流行的mvc到现在mvp,每个设计模式都有它的优缺点,我们需要根据自己公司业务需求和实际情况来进行选择。
2、dagger2:
一、引入配置
1、添加dagger2的依赖(android studio3.0版本更新后使用 implementation 代替 complile)
implementation 'com.google.dagger:dagger:2.6'
annotationProcessor 'com.google.dagger:dagger-compiler:2.6'
二、操作步骤
1、使用Inject指定需要注入的目标。
比如创建presneter对象。
2、使用Module指定类,Provides指定方法。
用来存放注入对象的创建。比如return new presenter的对象。
3、使用Component(modules=xxx.class)通过接口将创建实例的代码和目标关联在一起。
指向的是Module类,接口中的方法是Inject指定对象。
4、Rebuild。编译生成文件。
5、注入presenter对象。通过生成的文件,创建presenter对象来调用方法,完成解耦。
如图,其实就是把创建presenter对象使用注解分开来做,最后完成赋值。
![](https://i-blog.csdnimg.cn/blog_migrate/31651c922f8dccc4512d3cc5610a9309.png)
@Inject:指定需要注入的对象,不能为私有。
@Module:指注入的内容所依赖的类。@Provides:指定注入内容所依赖的方法。
@Conmponent:连接注入对象和注入内容的桥梁,既指定对象,又指定内容依赖的类。
3、代码
分包结构
![](https://i-blog.csdnimg.cn/blog_migrate/0ccb1ac7727040e6bc1e2481732c02d3.png)
具体代码地址:https://github.com/xieao100/MyDemo