gpt4 book ai didi

java - 如何在java中为实体实现状态转换?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:22:52 24 4
gpt4 key购买 nike

我的应用程序中有多个实体,如用户、帐户、许可证等。每个实体都有一个与之关联的状态,如 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com