24

使用适用于 Android 的依赖注入框架(如DaggerTransfuseRoboGuice )有哪些具体好处或优势?

例如,什么样的应用程序最能从使用 DI 中受益?是否有更多的性能优势,或者更多的是扩展应用程序的便利性,或者更多的是使其可测试?

提出这个问题的原因之一是衡量我正在开发的应用程序是否真的会从中受益。由于我打算让应用程序在某些时候变得严肃,因此可测试性和易于扩展性会很好,即使第一个版本的使用成本很高(更多的设置时间、学习曲线等)。

谢谢!

4

1 回答 1

39

例如,什么样的应用程序最能从使用 DI 中受益?

依赖注入(作为一种模式而不是库)几乎可以使所有代码受益。

  • 它促进设计模块化组件,这些组件仅公开执行特定操作所需的必要 API。当您被迫分解应用程序的各个部分时,您必须考虑要公开多少实现细节、API 的行为方式以及类和方法的可见性。
  • 它促进了组件的逻辑抽象(想想:接口及其实现)。你当然不必这样做,但无论如何,你DI的东西越多,它最终就会有机地发生。
  • 它通过创建一个类型消费的单点来促进可测试性,类通过该消费点获得它需要的东西。需要将 a 换成FooaTestFoo吗?没问题。

有更多的性能优势吗?

不,依赖注入库的存在只是为了减少模式周围的样板文件并增加请求依赖项的声明能力。

是否更多地关注扩展应用程序的便利性?

绝对地。虽然我绝不会推荐在 Android 应用程序中使用 Guice(或 RoboGuice),但 Google I/O 对 Guice 的介绍性演讲很好地介绍了为什么依赖注入在这方面很重要。

更多关于使其可测试?

是和不是。这是适当的抽象和模块化的一个愉快的副作用。测试是一件很棒的事情,因此依赖注入提供了便利这一事实也很棒。

我最近在 Android 的背景下做了一个关于 Dagger 的演讲,你可以观看* 或查看幻灯片。演讲从依赖注入作为一种模式开始,然后进入 Dagger 如何减少样板文件并启用一些非常酷的功能。

我还制作了一个相当高级的示例应用程序,它利用 Dagger 处理复杂的注入用例,这可能也值得一试。

*讲座目前不是免费的,但会在未来 10 个月的某个时候免费。

于 2014-02-04T05:29:42.417 回答