美文网首页
Dagger2 简单入门三部曲(二)——为什么使用?

Dagger2 简单入门三部曲(二)——为什么使用?

作者: d74f37143a31 | 来源:发表于2018-11-28 22:10 被阅读60次

Dagger2 简单入门三部曲(一)——是什么?
Dagger2 简单入门三部曲(二)——为什么使用?
Dagger2 简单入门三部曲(三)——怎么使用?(进行中)

通过 上文 了解到了 dagger2 是什么也就知道了为什么要用它了。
有以下几个原因:

  1. 解耦。
  2. 方便做单元测试,尤其是 Mock 测试
  3. Dependency injection frameworks have existed for years with a whole variety of APIs for configuring and injecting (官方文档介绍:存在多年,放心使用)
  4. 大厂、可靠、维护及时


    image

解释一下上面说到的几个词。

  • 解耦

参考上篇文章介绍Dagger2 简单入门三部曲(一)——是什么?

单元测试是为了测试某一个代码单元而写的测试代码。但是什么叫“一个代码单元”呢?是一个模块、还是一个类、还是一个方法(函数)呢?不同的人、不同的语言,都有不同的理解。一般的定义,尤其是是在OOP领域,是一个类的一个方法。在此,我们也这样理解:单元测试,是为了测试某一个类的某一个方法能否正常工作,而写的测试代码。

  • 集成测试

集成测试,也叫组装测试或联合测试。在单元测试的基础上,将所有模块按照设计要求(如根据结构图)组装成为子系统或系统,进行集成测试。

  • Mock 测试

mock测试就是在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法。

先简单理解一下相关概念,为三部曲的终篇做铺垫

这里之所以要理解先相关概念是为了方便理解代码,不然直接上代码我们都是一脸懵逼的。

@Inject

@Inject 不是 Dagger2 中专有的词,它是在 javax.inject 中的

那么javax.inject又是什么呢?

从下面的英文解释可以看出,inject 就是依赖注入,它的作用是使代码 可以最大化可重用性、可测试性和可维护性

image

下面是inject 的不足之处: 查看原文请点击

But @Inject doesn’t work everywhere:

  • Interfaces can’t be constructed.(接口不能够构建)

  • Third-party classes can’t be annotated.(第三方类不能被注解)

  • Configurable objects must be configured!(必须配置可配置对象!)

For these cases where @Inject is insufficient or awkward, use an @Provides-annotated method to satisfy a dependency. The method’s return type defines which dependency it satisfies.

上面介绍完了@Inject的不足然后开始说解决办法就是用@Provides注解实现,那么@Provides是什么?

@Provide

modules 中,我们定义的方法是用这个注解,以此来告诉 Dagger2我们想要构造对象并提供这些依赖。

All @Provides methods must belong to a module. These are just classes that have an [@Module](https://google.github.io/dagger/api/latest/dagger/Module.html) annotation
这段话说明了 @Provice 注解是要从属与 某一个 Module

@Module

Modules 类里面的方法专门提供依赖,所以我们定义一个类,用@Module 注解,这样 Dagger2 在构造类的实例时候,就知道从哪里去找到需要的依赖。

@Component

Components 从根本上来说就是一个注入器,它是@Inject@Module 的桥梁,它的主要作用就是连接这两个部分。

在开始使用 Dagger2之前需要在Android studio中点击:Build -> Make ModuleDagger2通过 apt 自动生成的我们需要的类

前不久还看到一篇文章说不用 Dagger2MVP 架构是没有灵魂的。所以下篇文章我们也来入门一下Dagger2

文章如有偏颇,请多指教,一起成长~

相关文章

网友评论

      本文标题:Dagger2 简单入门三部曲(二)——为什么使用?

      本文链接:https://www.haomeiwen.com/subject/nyqtcqtx.html