我听说过" @ImplementedBy是邪恶的",理由是它打破了DI概念并让界面意识到它的实现者.
在某些情况下可能会出现这种情况,但我经常发现它只会导致更清晰的代码(没有很长的模块可以维护),而不会真正伤害过程中的任何内容.
作为语用学,而不是纯粹主义者,你认为什么时候使用@ImplementedBy是值得的?
Dea*_*ler 12
我和@ImplementedBy同时感受到了同样的呃,ick,yuck的感觉,它非常有用.Spring必须扫描你提供的包列表中的所有类.在Guice中,您不必配置要扫描的包列表,@ ImplementedBy是关键(如果不使用Binder进行绑定).当它在第一个Injector.getInstance上关闭你的对象heirarchy,然后命中一个接口,它然后使用@ImplementedBy找到默认实现(只要Binder中没有任何内容覆盖该默认值).
我们也使用@ImplementedBy.我们发现使用它非常好,它有点呃,但它只是工作和工作很好,因为它是DI,它实际上并不依赖于实现,因为你可以用新的方式覆盖绑定.
同时,DI框架通常越来越少地使用接口.所有DAO接口都在我们的项目上消失了,我们仍然可以为DAO交换模拟对象.java类是隐含的接口,可以在不需要接口的情况下进行模拟.我们现在保留主api的接口使用非常清晰,并且不会使用实现代码混乱.对于DAO,我们不再需要它了.
Jes*_*son 10
您通常应该优先考虑对实时(JIT)绑定的显式绑定.显式绑定允许注入器在注入器创建时爬行依赖图.如果依赖项缺失或无效,这允许Guice快速失败.使用像@ImplementedBy这样的即时绑定,Guice无法在执行绑定之前报告问题.
JIT绑定与PrivateModules /子注入器的交互也很差.虽然大多数应用程序不应该需要这些功能,但是当您执行此操作时,如果每个绑定都属于特定模块,则不会那么痛苦.
| 归档时间: |
|
| 查看次数: |
4314 次 |
| 最近记录: |