如何在java中实现实体的状态转换?
发布时间:2020-12-15 04:34:55 所属栏目:Java 来源:网络整理
导读:我的应用程序中有多个实体,如用户,帐户,许可证等.每个实体都有与之关联的状态,如Active,Ok,Suspended,Unverified,PendingPayment,PendingApproval等.我想确保实体可以从预定义状态移动对于另一个用户只能从Ok移动到Suspended但不能从Unverified移动到Suspend
我的应用程序中有多个实体,如用户,帐户,许可证等.每个实体都有与之关联的状态,如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"); } } 通过在Enum中实现方法转换,您将能够轻松地为JPA中的枚举设置新值,您可以将此调用隐藏到set方法中,并且如果状态不正确,它也会抛出异常. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |