KunMinX
V2EX  ›  Android

Dagger 的存在价值

  •  
  •   KunMinX · Sep 15, 2019 · 16852 views
    This topic created in 2618 days ago, the information mentioned may be changed or developed.
    看许多开源项目都不假思索地使用了这个库,实在不解,这个库究竟是为解决什么问题而存在,真的非它不可吗?

    有什么典型的例子能证明它的存在价值吗?
    12 replies  •  2019-09-19 16:54:59 +08:00
    KunMinX
    KunMinX
    OP
    Sep 15, 2019
    1
    我唯一能想到的是,保证构造入参的一致性,此外还有别的价值吗?
    troywinter
    troywinter
    Sep 15, 2019
    2
    DI 啊,跟服务端的 spring 作用一样啊,因为国外那帮程序员得写测试代码啊,所以需要 DI
    momocraft
    momocraft
    Sep 15, 2019
    3
    di 庫不算少的, dagger 可能只是出名

    還要找例子來理解價值說明你可能不需要, 不用沒關係
    crayygy
    crayygy
    Sep 15, 2019 via iPhone
    4
    先理解了依赖注入,以及为什么需要依赖注入,再去看 dagger2 这类的可能会比较好理解一些,。

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

    KunMinX
    KunMinX
    OP
    Sep 15, 2019
    5
    @troywinter @momocraft @crayygy

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

    而且顺带解决了多层依赖的关系。
    比如
    A a = new A()
    B b = new B()
    C c = new C(a,b)
    的情况,有了 DI 框架,直接
    C c = C.xxx 即可,有点类似于工厂模式,通过封装解决一致性问题,具体我再看看
    crayygy
    crayygy
    Sep 15, 2019
    6
    @KunMinX #5 如果你使用 Kotlin 的话,可以试试 Koin,虽然效率上比不上 Dagger2,但搭配 Kotlin 比较不错
    KunMinX
    KunMinX
    OP
    Sep 15, 2019
    7
    @KunMinX 嗯,对于工厂模式,只能说有点类似,
    因为工厂模式尚且需要手动管理,DI 框架不需要,
    DI 框架类似于声明式编程,让真正的代码在编译时生成。所以使用起来更灵活,不用修改工厂。
    KunMinX
    KunMinX
    OP
    Sep 15, 2019
    8
    @crayygy 好的 谢谢推荐
    zealot0630
    zealot0630
    Sep 15, 2019 via Android
    9
    DI 最大作用就是解耦
    mephistophilis
    mephistophilis
    Sep 15, 2019 via iPhone
    10
    一看你就不写 ut
    hantsy
    hantsy
    Sep 16, 2019
    11
    Dagger2 应该就是 Guice 的 Android 翻版吧。
    zzyy
    zzyy
    Sep 19, 2019
    12
    没这玩意, 单元测试不好写
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1866 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 06:26 · PVG 14:26 · LAX 22:26 · JFK 01:26
    ♥ Do have faith in what you're doing.