dagger2
Dagger是一个依赖注入的框架:
依赖注入是一种面向对象的编程模式,它的出现是为了降耦合度,所谓耦合就是类之间依赖关系,
所谓降低耦合就是降低类和类之间的依赖关系。
我们之前做的:
一个类的构造函数中通过参数引入另一个类的对象,或者通过set方法设置一个类的对象其实就是使用的依赖注入
mvp+Dagger2:为什么要在MVP模式中使用Dagger2?
在项目中绝大多数的使用都是Dagger结合MVP架构使用的,
注**.在这里说下MVP开发者模式(MVP即model(数据模型),view(视图层),persent(逻辑控制层),model为ui层提供数据,或者保存ui层传下来的数据,view单纯的展示数据,响应用户操作并都转发给persenter来做具体的处理,persenter从model处理数据,运算和转化,最后用view来展示。*MVP仅用于应用的GUI部分,他并不是整个应用的架构方式,一个应用的主要架构应该包括基础组件,业务逻辑层和GUI展示层,而MVP仅是展示层的设计模式,没有固定的实现方式,只要能体现出它的方法就可以算是MVP。
modle与view不能直接通信,presenter 通过协议进行数据传递,阻断了view和model的直接联系,使view和model更加专注于自身的业务逻辑。view由activity,fragment实现的view会包含一个或多个persenter的引用来满足试图的业务逻辑。
MVP优点:1.v和m之间的耦合度降低使其更专注于自身业务逻辑,结构清晰方便维护。2.便于单元测试,3.代码复用率高4.代码框架更适用于快速迭代开发
MVP缺点:试图渲染放在了persenter中,所以试图和persenter的交互会过于频繁,如果试图需要改变那么persenter也需要改变。
)
因为在MVP中使用是非常典型的降低耦合的使用。在MVP模式中activity持有persenter的引用,同时persenter也持有view的引用,这样便于更新UI界面,这样activity就和persenter仅仅的耦合在一起了,而Dagger2是依赖注入框架就是结耦合的,所以MVP中使用Dagger2也就再好不过了,activity持有了presenter的引用,如果presenter的构造函数发生改变则持有presenter的一方也需要发生改变。
activity中需要presenter,所以在activity中
各个注解的作用:
@inject:程序会将Dagger2会将带有此注释的变量或者构造方法参与到依赖注入当中,Daggere2会实例化这个对象。@injec注解的字段不能定义为私有或者受保护的
@module:带有该注解的类需要对外提供依赖,其实就是提供实例化需要的参数,Dagger2在实例化的过程中发现一些参数,Dagger2就会到该类中寻找带有@provides注解的对应参数
@provides 对外提供需要的参数,一般而言有几个参数就需要有几个带有@provides的方法
@component对 带有该注解的接口或者抽象类起到一个关联桥梁的作用,作用就是将带@inject的方法或对象和带有@module的类型进行关联,只有通过该接口或者抽象类才可以在实例化的时候到带有@module中类中去寻找需要的参数,也就是依赖注入。