作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我的应用程序中有多个实体,如用户、帐户、许可证等。每个实体都有一个与之关联的状态,如 Activity 、正常、暂停、未验证、待付款、待批准等。我想确保这些实体可以从一个预定义的状态到另一个像用户只能从 Ok 移动到 Suspended 但不能从 Unverified 移动到 Suspended。实现这个的最佳设计模式是什么?我环顾四周,主要是为此类问题找到状态机,但它们看起来太复杂了,因为我不想考虑状态中的事件。我只想限制状态的转换。
到目前为止,我可以考虑使用一个预填充的二维数组来定义每个维度中的所有状态并表示可能的转换。寻找任何更好的方法。
最佳答案
您可以在 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");
}
}
通过在枚举中实现方法转换,您将能够轻松地在 JPA 中为枚举设置新值,您可以将此调用直接隐藏到您的设置方法中,并且如果状态不正确,它只会抛出异常。
关于java - 如何在java中为实体实现状态转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38230864/
我是一名优秀的程序员,十分优秀!