我想在JPA中實現狀態設計模式。我目前正在做這件事的方式在這個blog post列出。如何在JPA域模型中實現狀態設計模式
作者使用包含所有可用狀態實現的枚舉,而不是爲每個狀態的狀態抽象和寫實現創建抽象類/接口。我發現這種方法非常有用,因爲枚舉可以在JPA中輕鬆地序列化,並且可以無需額外工作就可以存儲對象的當前狀態。我還將狀態接口和所有狀態類嵌套到枚舉中,使其成爲私有的,因爲它們是特定於實現的,並且不應該對任何客戶端可見。這裏是一個枚舉的代碼示例:
public enum State {
STATE_A(new StateA()),
STATE_B(new StateB());
private final StateTransition state;
private State(StateTransition state) {
this.state = state;
}
void transitionA(Context ctx) {
state.transitionA(ctx);
}
void transitionB(Context ctx) {
state.transitionB(ctx);
}
private interface StateTransition {
void transitionA(Context ctx);
void transitionB(Context ctx);
}
private static class StateA implements StateTransition {
@Override
public void transitionA(Context ctx) {
// do something
ctx.setState(STATE_B);
}
@Override
public void transitionB(Context ctx) {
// do something
ctx.setState(STATE_A);
}
}
private static class StateB implements StateTransition {
@Override
public void transitionA(Context ctx) {
throw new IllegalStateException("transition not allowed");
}
@Override
public void transitionB(Context ctx) {
// do something
ctx.setState(STATE_A);
}
}
}
我想和你分享這個,並得到你的想法。你覺得這有用嗎?你將如何在JPA域模型中實現狀態設計模式?
感謝, 西奧