public final class Exchange extends Object
Exchange
is part of our DDD building block.
Named after Apache Camel Exchange
.
IMPORTANT: Exchange
的状态是transient
的,不能跨进程传递.
由于legacy code与DDD code会并存很长时间,为了方便legacy code改动又不导致DDD code腐化,引入Exchange
.
一个Entity/ValueObject
有时候需要携带一些数据用于不同方法间交换使用,一处写,它处读,而这些属性不属于模型本身固有属性,就可以把这些程序员属性收敛到Exchange
内.
例子,订单取消场景:
legacy code根据取消的单据号取出相应的复核任务列表,一个方法内遍历复核任务列表计算该任务是否该返架,另外一个方法遍历该列表,根据是否返架修改任务状态.
如果把boolean needRestow
加到CheckTask
上,就腐化了CheckTask
,这时候就可以:
class CheckTask {
private final transient Exchange exchange = new Exchange();
public Exchange exchange() {
return exchange;
}
}
class LegacyCode {
void foo() {
checkTask.exchange().set("needRestow", true);
}
void bar() {
if (checkTask.exchange().is("needRestow")) {
// update check task status
}
}
}
public boolean exists(String key)
key
- public void set(String key, Object value)
如果该key上已经有值了,直接覆盖
允许同一个key,被赋值成不同类型的值:使用者为此负责
key
- value
- public <T> T get(String key, Class<T> valueType) throws ClassCastException
T
- key
- valueType
- ClassCastException
- 如果搞错了对应值的类型public boolean is(String key) throws ClassCastException
key
- ClassCastException
- 如果搞错了对应值的类型public void clear()
Copyright © 2020–2023. All rights reserved.