gpt4 book ai didi

java - Guice 的@ImplementedBy 是邪恶的吗?在某些情况下是否合适?

转载 作者:太空狗 更新时间:2023-10-29 23:03:02 26 4
gpt4 key购买 nike

我听说过“@ImplementedBy 是邪恶的”的说法,理由是它破坏了 DI 概念并使接口(interface)意识到其实现者。

在某些情况下这可能是正确的,但我经常发现它只会导致更干净的代码(不需要维护很长的模块),而不会真正伤害过程中的任何东西。

作为实用主义者,而不是纯粹主义者,您认为什么时候值得使用@ImplementedBy?

最佳答案

我对@ImplementedBy 有同样的呃、恶心、恶心的感觉,但同时,它非常有用。 Spring 必须扫描您给它的包列表中的所有类。在 Guice 中,您不必配置要扫描的包列表,@ImplementedBy 是关键(如果不使用 Binder 进行绑定(bind))。当它在第一个 Injector.getInstance 上降低您的对象层次结构并命中一个接口(interface)时,它然后使用 @ImplementedBy 找到默认实现(只要 Binder 中没有覆盖该默认值的内容)。

我们也使用@ImplementedBy。我们发现它使用起来非常好,它有点糟糕,但它可以正常工作并且工作得很好,因为它是 DI,所以它并不真正依赖于实现,因为无论如何你都可以用新的绑定(bind)覆盖绑定(bind)。

与此同时,接口(interface)通常越来越少地与 DI 框架一起使用。所有 DAO 接口(interface)在我们的项目中都消失了,我们仍然可以为 DAO 交换模拟对象。 java 类是隐式接口(interface),可以在不需要接口(interface)的情况下进行模拟。我们现在保留主要 api 的接口(interface)使用非常清晰,而不是将其与实现代码混淆。对于 DAO,我们不再需要它。

关于java - Guice 的@ImplementedBy 是邪恶的吗?在某些情况下是否合适?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6197178/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com