我正在使用 UML 状态图对流程进行建模。这是一些确定当前状态的伪代码:
function getAccountState(customer) {
if (authorizationRequired(customer)) {
return State.AUTHORIZATION_REQUIRED
}
if (updateRequired(customer)) {
return State.UPDATE_REQUIRED
}
return State.DRAFT
}
但是,我认为每个转换包含两次有点奇怪。顺序很重要,这意味着授权检查应该始终放在第一位。
如何为这个过程建模?
编辑:
这个过程背后的背景是一个 REST 服务。帐户被建模为资源,并且可以经历各种状态。任何时候请求资源时,服务都会按照上面伪代码描述的顺序执行检查,以生成相应的表示。根据答案,它包括:
- 如果帐户需要授权,则为该帐户授权的链接
- 如果需要更新,则提供更新配置文件的链接(但这只能在帐户获得授权或无需授权时发生)
- 如果配置文件是最新的,则用于完成帐户的链接(因为它必须更新并由客户更新,或者它从来不需要首先更新)
上面的代码只是一个例子。该服务还可以利用存储“状态”的数据库字段,尽管这是一种反模式,不是吗?通过对存储的数据应用业务规则而不是(冗余地)将状态存储在单独的字段中来“导出”当前状态更为可行。这就是伪代码应该表明的内容。