如何使用状态图对这个过程建模?
How to model this process using a state diagram?
我正在使用 UML 状态图对流程建模。这是一些确定当前状态的伪代码:
function getAccountState(customer) {
if (authorizationRequired(customer)) {
return State.AUTHORIZATION_REQUIRED
}
if (updateRequired(customer)) {
return State.UPDATE_REQUIRED
}
return State.DRAFT
}
我得到的最接近的是这张图:
不过,我觉得每个transition包含两次有点奇怪。顺序很重要,这意味着授权检查应该始终排在第一位。
如何模拟这一过程?
编辑:
此过程背后的后台是 REST 服务。该帐户被建模为资源,可以经历各种状态。任何时候请求资源时,服务都会按照上面伪代码描述的顺序执行检查,以生成相应的表示。根据答案,它包括:
- a link如果账号需要授权就给账号授权
- a link 在需要更新时更新配置文件(然而,这只能在帐户获得授权或不必获得授权后发生)
- a link 如果配置文件是最新的(要么因为它必须更新并且由客户更新,要么一开始就不需要更新)来完成帐户
上面的代码只是一个例子。该服务还可以利用存储 "state" 的数据库字段,尽管这是一种反模式不是吗?通过对存储的数据应用业务规则而不是(冗余地)将状态存储在单独的字段中,"derive" 当前状态更可行。这就是伪代码应该指示的内容。
根据您的编辑,我想出了以下方法:
您将通过(可选)授权和更新达到 Draft
状态。如果失败,状态机将被重置。
我建议对 "it is somewhat strange that each transition is contained twice" 点发表评论,我知道从一个状态可以有多个由同一事件触发的转换,但在这种情况下,转换有不同的守卫。我记得,符号是 evt[guard]。希望对您有所帮助。
我正在使用 UML 状态图对流程建模。这是一些确定当前状态的伪代码:
function getAccountState(customer) {
if (authorizationRequired(customer)) {
return State.AUTHORIZATION_REQUIRED
}
if (updateRequired(customer)) {
return State.UPDATE_REQUIRED
}
return State.DRAFT
}
我得到的最接近的是这张图:
不过,我觉得每个transition包含两次有点奇怪。顺序很重要,这意味着授权检查应该始终排在第一位。
如何模拟这一过程?
编辑:
此过程背后的后台是 REST 服务。该帐户被建模为资源,可以经历各种状态。任何时候请求资源时,服务都会按照上面伪代码描述的顺序执行检查,以生成相应的表示。根据答案,它包括:
- a link如果账号需要授权就给账号授权
- a link 在需要更新时更新配置文件(然而,这只能在帐户获得授权或不必获得授权后发生)
- a link 如果配置文件是最新的(要么因为它必须更新并且由客户更新,要么一开始就不需要更新)来完成帐户
上面的代码只是一个例子。该服务还可以利用存储 "state" 的数据库字段,尽管这是一种反模式不是吗?通过对存储的数据应用业务规则而不是(冗余地)将状态存储在单独的字段中,"derive" 当前状态更可行。这就是伪代码应该指示的内容。
根据您的编辑,我想出了以下方法:
您将通过(可选)授权和更新达到 Draft
状态。如果失败,状态机将被重置。
我建议对 "it is somewhat strange that each transition is contained twice" 点发表评论,我知道从一个状态可以有多个由同一事件触发的转换,但在这种情况下,转换有不同的守卫。我记得,符号是 evt[guard]。希望对您有所帮助。