Tec*_*nch 3 java state state-machine
我的应用程序中有多个实体,如用户,帐户,许可证等.每个实体都有与之关联的状态,如Active,Ok,Suspended,Unverified,PendingPayment,PendingApproval等.我想确保实体可以从预定义状态移动对于另一个用户只能从Ok移动到Suspended但不能从Unverified移动到Suspended.实现这个的最佳设计模式是什么?我环顾四周,大多数时候都会找到状态机来解决这些问题,但它们看起来太复杂了,因为我不想考虑该州的事件.我想要限制的只是国家的过渡.
截至目前,我可以考虑使用预先填充的2D数组来定义每个维度中的所有状态并表示可能的转换.寻找更好的方法.
您可以在JPA枚举类型中使用.看看下面的链接. http://tomee.apache.org/examples-trunk/jpa-enumerated/README.html
public enum State {
STATE1,STATE2(STATE1),STATE3(STATE1,STATE2);
private State[] previousStates;
private State(){
}
private State(State ...state) {
this.previousStates =state;
}
public State transition(State state) throws Exception {
for(State tmp: state.previousStates) {
if (this == tmp) {
return state;
}
}
throw new Exception("Illegal state");
}
}
Run Code Online (Sandbox Code Playgroud)
通过在Enum中实现方法转换,您将能够轻松地为JPA中的枚举设置新值,您可以将此调用隐藏到set方法中,并且如果状态不正确,它也会抛出异常.
| 归档时间: |
|
| 查看次数: |
885 次 |
| 最近记录: |