在Android上使用DI的具体好处是什么?

24

使用依赖注入框架(例如Dagger, TransfuseRoboGuice)对于Android开发,有哪些具体的好处或优势?

例如,哪些类型的应用程序最适合使用DI?性能优势更大,还是更容易扩展应用程序,或者更多地关注可测试性?

问这个问题的原因之一是为了衡量我正在开发的应用程序是否真正受益于它。由于我打算在某些时候让应用程序变得严肃起来,因此即使对于前几个版本而言,使用它可能会很昂贵(需要更多时间设置、学习曲线等),但可测试性和易于扩展仍然是很好的。

谢谢!


1
Toothpick也是一个不错的选择:https://github.com/stephanenicolas/toothpick - Snicolas
1个回答

40
例如,使用依赖注入可以为哪些应用程序带来最大的好处? 依赖注入(作为一种模式而非库)几乎有益于所有代码。
它促进了设计模块化组件,这些组件仅公开执行特定操作所需的必要API。当你被迫分解应用程序的组成部分时,你必须考虑公开多少实施细节、API的行为以及类和方法的可见性。
它促进了组件的逻辑抽象(如:接口及其实现)。你当然不必这样做,但随着你使用依赖注入的次数越多,它自然而然就会发生。
通过创建单个类型消耗点,它使得可测试性更加容易,这样一个类可以获取它所需的内容。需要将“Foo”替换为“TestFoo”吗?没问题。
那么这是否存在性能优势呢? 没有。依赖注入库存在的唯一目的就是减少模式周围的样板代码,并增加请求依赖项的声明能力。
它是否更方便扩展应用程序? 当然。虽然我从不建议在Android应用程序中使用Guice(或RoboGuice),但来自Google I/O的Guice介绍性演讲是介绍为什么依赖注入在这方面很重要的绝佳材料。
它是否更加关注使其可测试性? 是和否。这是正确抽象和模块化的一个愉快的副作用。测试是一件好事,因此依赖注入提供了一种容易进入测试的方式,这也很好。

我最近在Android上下文中就Dagger进行了演讲,您可以观看*或查看幻灯片。演讲从依赖注入模式开始,并介绍了Dagger如何减少样板代码以及实现一些非常酷的功能。

我还制作了一个相当先进的示例应用程序,它利用Dagger实现复杂的注入用例,也值得一看。

*目前演讲不是免费的,但将在未来10个月内变为免费。


所以理论上我可以编辑问题的标题并删除Android部分,它仍然有效,对吗?我的意思是,除了特定的Dagger / Guice参考之外,大多数情况下都适用于移动平台或其他平台。这正是我正在寻找的,谢谢!我确实观看了视频和幻灯片,所以很酷能看到你回答我的问题 :) - Acapulco
@Jake Wharton:您能解释一下为什么您更喜欢Dagger而不是Roboguice吗?如果您谈论Dagger,您是指Dagger1还是2? - drdrej

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接