【发布时间】:2015-01-23 05:08:45
【问题描述】:
我在我工作的代码库中反复看到的情况是,多个工厂或其他对象决策者将采用相同的参数并根据该参数决定实现。
interface Foo {
foo();
}
interface Bar {
bar();
}
class FooProvider {
... members constructor etc...
Foo get(BazType bazType) {
switch (bazType) {
case BAZ_A:
return bazA;
case BAZ_B:
return bazB;
....
}
}
}
class BarProvider {
Bar get(BazType bazType) {
...same as fooFactory
}
}
... more interfaces and providers follow
这些提供者(工厂?不确定如何称呼它们)将在请求的生命周期中在可能不同的类中被调用一次或多次,但 BazType 将在请求开始时定义并最终确定。我发现我们必须多次这样做是多余的,并且可能很危险。
是否可以改为定义实现并将它们全部绑定到特定模块中并在每个请求/线程的基础上加载所需的模块?我看到有一个 Modules.override() 但这似乎更像是一次性的事情,将生产代码换成测试或开发代码,而不是我需要的。显然,我不想为我服务的每个请求创建一个注入器。
【问题讨论】: