【发布时间】:2021-06-10 17:25:21
【问题描述】:
我正在开发一个 Spring boot 应用程序,我需要实现以下格式的状态转换表,其中动作和条件的组合决定了实体从一种状态到另一种状态的转换:
From State| To State| User Action | Condition
----------------------------------------------------------------
S0 | S1 | Create a record |
-----------------------------------------------------------------
S1 | S1 | Update a record |
-----------------------------------------------------------------
S1 | S1 | Run validation |
-----------------------------------------------------------------
S1 | S2 | Mark state as S2 | Record is valid
在此应用程序中,已经有 Create、Update 和 Running Validation 的 API。
根据要求,状态机应该是可配置的,以便可以添加任何新状态/删除现有状态,以及可以通过仪表板更改给定转换的操作和条件。
为了满足这一要求,我曾考虑将State、Action、Condition 和StateTransition 视为单独的实体,如下所示:
动作实体:
@Entity
@Table(name = "action")
public class Action implements Serializable {
@Id
private String id;
@Column(name = "action_type")
@Enumerated(EnumType.STRING)
private ActionType actionType;
@Column(name = "action_description")
private String actionDescription;
}
动作类型枚举:
Enum ActionType {
CREATE_RECORD, UPDATE_RECORD, RUN_VALIDATION;
}
国家实体:
@Entity
@Table(name = "state")
public class State implements Serializable {
@Id
private String id;
@Column(name = "name")
private String name;
}
条件实体(不明白怎么做)
@Entity
@Table(name = "condition")
public class Condition implements Serializable {
@Id
private String id;
@Column(name = "description")
private String description;
... CANNOT UNDERSTAND WHAT ELSE SHOULD I PUT HERE
}
状态转换实体如下:
@Entity
@Table(name = "state_transition")
public class State implements Serializable {
@Id
private String id;
@Column(name = "from_state")
private String fromStateId;
@Column(name = "to_state")
private String toStateId;
@Column(name = "action_id")
private String actionId;
@Column(name = "condition_id")
private String conditionId;
}
基本上,结合当前状态、动作和条件,我应该能够从状态转换表中找出下一个状态。
但我陷入了以下问题:
-
我应该如何实施用户操作?正如我之前提到的,我上面指定的其中一些操作作为 API 存在于应用程序中。基本上,我无法理解如何将我想要实现的用户操作实体与现有流程联系起来。
-
我应该如何将 Condition 实现为实体?条件基本上是一个表达式,其计算结果为真/假。我没有得到任何线索,我怎样才能将它作为一个实体来捕获。
任何人都可以就这个问题提供任何指点吗?谢谢。
【问题讨论】:
标签: spring-boot hibernate jpa state-machine state-management