【问题标题】:passing a new value through multiple layers in legacy code在遗留代码中通过多层传递新值
【发布时间】:2019-01-30 10:03:46
【问题描述】:
我有一个整体后端应用程序。我有一个客户端层(调用第二个服务),它位于几层业务逻辑之后,比如说 3-4 层服务和其他类。它在 java 6 中。我有一个新的要求,即从我的控制器层将字符串值转发到该层,而对中间层的修改最少。
有什么好的方法?
- 我知道一个 -ThreadLocal。如果我使用 ThreadLocal,在 java 6 中使用它是否安全。
- 在这种情况下我可以使用其他设计模式吗?
我现在当然不能更改所有中间层的合同。
【问题讨论】:
标签:
design-patterns
java-6
thread-local
legacy-code
【解决方案1】:
您可以尝试构造一个作为单例启动的 java bean。
假设您想将变量“foo”和“bar”从上层传输到下层:
public class TransporterUpperToLowerLayer{
public static TransporterUpperToLowerLayer getInstance(){
if(instance == null)
instance = new TransporterUpperToLowerLayer();
return instance;
}
public void setFoo(Object foo){
this.foo = foo;
}
public void setBar(Object bar){
this.bar = bar;
}
public Object getFoo(){
return foo;
}
public Object getBar(){
return bar;
}
}
上层调用setter,下层调用getter。
上层:
TransporterUpperToLowerLayer.getInstance().setFoo(myFoo);
下层:
TransporterUpperToLowerLayer.getInstance().getFoo();