java - 定义具有依赖关系的接口(interface)的原则是什么?

标签 java inversion-of-control method-signature

哪个依赖项应该作为参数位于方法签名中,哪个不应该?由于我们有像 spring 这样的 IoC 容器,因此大多数依赖项都可以通过它注入(inject)。

对于java.util.concurrent.Executor:

public interface Executor {

    void execute(Runnable command);
}

界面可能是

public interface Executor {

    void execute();
}

另一种情况,在传统的Web应用程序中,计数器可能会这样写

public interface CounterManager {

    int query(User user);//user is a runtime information
}

由于 spring 提供了请求范围,User 也可以被注入(inject)。

public interface Counter {

    int query();//get user through Injected
}

是否有一些原则或最佳实践可供选择?谢谢!

最佳答案

Is there some principle or best practice to make the choice? Thanks!

您可以使用“编码复杂性规则”作为指导。任何能够降低短期和长期代码复杂性的方法都是好的。凡是引起它的东西都是不好的。

如果您开始使用 DI 容器注入(inject)所有内容,您最终将得到一个 Merriam-Webster 词典大小的 DI 设置文件。

如果事情是如此简单,可以作为参数传递给方法,为什么要使用 DI 容器使事情变得复杂?

关于java - 定义具有依赖关系的接口(interface)的原则是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30208488/

相关文章:

dependency-injection - 对使用 IOC 容器、服务定位器和工厂感到困惑

java - 确保正确参数类型的 Groovy 最佳/推荐方法

method-signature - 我可以查询 Near 合约的方法签名吗?

java - 在哪里适合 Jasper Reports - 前端还是业务?

c# - Winforms IOC 容器 - 组合根

java - 从匿名内部类引用封闭类'this

php - 我如何解决 Laravel 4 中的 "Target [Interface] is not instantiable"?

Java - 是否可以使用方法签名输出堆栈跟踪?

基于 Java 的 JSON 操作

java - 进程可以连接到自己创建的套接字吗?