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

标签 android dependency-injection roboguice dagger transfuse

在 Android 上使用依赖注入(inject)框架有哪些具体好处或优势,例如 Dagger , TransfuseRoboGuice ?

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

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

谢谢!

最佳答案

For example, what kind of apps would benefit the most from using DI?

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

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

Is there more of a performance advantage?

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

Is it more on the ease of extending an app?

当然。虽然我绝不会推荐在 Android 应用程序中使用 Guice(或 RoboGuice),但 the introductory talk to Guice from Google I/O很好地介绍了为什么依赖注入(inject)在这方面很重要。

Even more about making it testable?

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

我最近在 Android 的背景下做了一个关于 Dagger 的演讲,你 can watch * 或 view the slides .演讲从依赖注入(inject)作为一种模式开始,然后讨论 Dagger 如何减少样板文件并启用一些非常酷的功能。

我也做了a fairly advanced sample application它利用 Dagger 处理可能也值得一试的复杂注入(inject)用例。

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

关于android - 在 Android 上使用 DI 的具体好处是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21522091/

相关文章:

java - getFilesDir() 在子类中查看

java - Spring boot bean注入(inject)bean方法论

android - 如何在 Android 中使用 RoboGuice 注入(inject)上下文?

android - 使用 JSoup 将 html 表解析为 listview android

android - Visual Studio Cordova 应用程序未在 Android 设备上更新

Grails:在域类中动态注入(inject)服务

java - 绑定(bind)注解@InjectView 没有@Inject 声明的警告

android - 使用 RoboGuice 在我的 Activity 中注入(inject)类

android - 尝试了解 android 测试

java - 如何通过注解注入(inject)一个对象并在这个对象上设置一个属性值