Hen*_*ian 13 java android dependency-injection dagger-2
此时,我对依赖注入(DI)的理解仅来自本文.我有兴趣尝试,但我只需澄清一些事情:
我知道,将Dagger与RxJava进行比较就像将苹果与橙子相比较.但从某种意义上说,它们都像Dagger一样是水果,而RxJava是可能使我的项目更大的第三方库.
Jef*_*ica 10
你已经将两个单独的问题结合起来,这些问题应该单独评估:"为什么我们需要依赖注入?" 和"为什么我们需要匕首2?"
依赖注入(控制反转)很有用,因为它允许组件的使用者提供组件的依赖关系.以日志格式化程序为例:如果没有依赖注入,您可能需要编写登录到的类的三个不同版本stdout,远程服务器或文本文件.相比之下,如果您要编写一个LogFormatter接受Writer它写入的内容,那么您可以编写一次并传入Writer最合适的内容,包括测试double(您制作的FakeWriter,StringWriter或模拟框架)用于测试的创建的mockWriter实例.虽然它是为Guice而不是Dagger编写的,但我写了一个单独的SO答案,讨论了依赖注入在生产使用和测试用例中的价值; 您看到的大部分教程都将重点关注测试,假设"生产"和"测试"是您事先了解的两种情况,其他重用和再利用的机会将在以后出现.
一旦您接受了依赖注入为您提供的模块化,可重用性和可测试性优势,您可能会留下一个问题:如何管理这些极长的构造函数?毕竟,为了继续这个LogFormatter例子,你将无法在不关心日志的情况下编写你的应用程序.
MyApplication application = new MyApplication(
new LoggingService(new LogFormatter(new StdOutWriter())),
new DatabaseService(new MyApplicationDatabase(new File("my.db"))),
...);
Run Code Online (Sandbox Code Playgroud)
这就是Dagger的亮点:它让您拥有依赖注入的所有好处,同时自动为您管理构造函数.这使得它可以封装创建对象的责任并使其更清晰,更安全,RxJava可以封装管理和传播异步事件的责任,使其更清洁,更安全.
重要的是要意识到Dagger 2的样板减少与手动依赖注入相比,而不是你要比较的原始构造函数调用.如果你坚持new直接调用,你可能会完全避免使用这个对象构建样板,但是你也会发现自己正在经历困难的杂技,试图将工作分解给多个开发人员,或者试图测试或重用你的代码.写了.集体的痛苦是为什么依赖注入如此受欢迎的概念,以及为什么像Spring,Guice和Dagger这样的图书馆越来越受欢迎.
我可以保证在几个特别大,众所周知且使用良好的生产Android应用程序中使用Dagger 2.:)
| 归档时间: |
|
| 查看次数: |
2155 次 |
| 最近记录: |