Dagger 的存在价值

2019-09-15 12:37:39 +08:00
 KunMinX
看许多开源项目都不假思索地使用了这个库,实在不解,这个库究竟是为解决什么问题而存在,真的非它不可吗?

有什么典型的例子能证明它的存在价值吗?
12094 次点击
所在节点    Android
12 条回复
KunMinX
2019-09-15 12:38:53 +08:00
我唯一能想到的是,保证构造入参的一致性,此外还有别的价值吗?
troywinter
2019-09-15 12:42:46 +08:00
DI 啊,跟服务端的 spring 作用一样啊,因为国外那帮程序员得写测试代码啊,所以需要 DI
momocraft
2019-09-15 12:45:08 +08:00
di 庫不算少的, dagger 可能只是出名

還要找例子來理解價值說明你可能不需要, 不用沒關係
crayygy
2019-09-15 12:54:22 +08:00
先理解了依赖注入,以及为什么需要依赖注入,再去看 dagger2 这类的可能会比较好理解一些,。

推荐这个视频,我一开始也不大明白 DI 的目的是什么,看完就差不多懂了

<amp-youtube data-videoid="oK_XtfXPkqw" layout="responsive" width="480" height="270"></amp-youtube>
KunMinX
2019-09-15 13:23:31 +08:00
@troywinter @momocraft @crayygy

谢谢,我大概理解了,DI 框架就是为了解决传统依赖注入办法导致的入参一致性问题,当参数变化时,不得不去所有依赖它的类中全改了。

而且顺带解决了多层依赖的关系。
比如
A a = new A()
B b = new B()
C c = new C(a,b)
的情况,有了 DI 框架,直接
C c = C.xxx 即可,有点类似于工厂模式,通过封装解决一致性问题,具体我再看看
crayygy
2019-09-15 13:28:35 +08:00
@KunMinX #5 如果你使用 Kotlin 的话,可以试试 Koin,虽然效率上比不上 Dagger2,但搭配 Kotlin 比较不错
KunMinX
2019-09-15 13:29:56 +08:00
@KunMinX 嗯,对于工厂模式,只能说有点类似,
因为工厂模式尚且需要手动管理,DI 框架不需要,
DI 框架类似于声明式编程,让真正的代码在编译时生成。所以使用起来更灵活,不用修改工厂。
KunMinX
2019-09-15 13:30:10 +08:00
@crayygy 好的 谢谢推荐
zealot0630
2019-09-15 15:42:58 +08:00
DI 最大作用就是解耦
mephistophilis
2019-09-15 17:48:44 +08:00
一看你就不写 ut
hantsy
2019-09-16 09:06:13 +08:00
Dagger2 应该就是 Guice 的 Android 翻版吧。
zzyy
2019-09-19 16:54:59 +08:00
没这玩意, 单元测试不好写

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/600906

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX