如何使用状态图建模此过程?

时间:2017-02-21 17:17:10

标签: rest uml state-diagram

我正在使用UML状态图对进程建模。这是一些确定当前状态的伪代码:

function getAccountState(customer) {

    if (authorizationRequired(customer)) {
        return State.AUTHORIZATION_REQUIRED
    }

    if (updateRequired(customer)) {
        return State.UPDATE_REQUIRED
    }

    return State.DRAFT
}

我得到的最接近的是这张图: State diagram

但是,我认为每次转换都包含两次有点奇怪。订单很重要,但这意味着,授权检查应该始终是第一位的。

如何为这个过程建模?

修改

此过程背后的背景是REST服务。该帐户被建模为资源,可以通过各种状态。无论何时请求资源,服务都按照上面的伪代码描述的顺序执行检查以生成相应的表示。根据答案,它包括:

  • 如果帐户需要授权,则授权帐户的链接
  • 如果需要更新,则更新个人资料的链接(但这只有在帐户获得授权或无需授权后才会发生)
  • 如果个人资料是最新的,则最终确定帐户的链接(因为它必须更新并由客户更新,或者首先不需要更新)

上面的代码只是一个例子。该服务还可以利用存储“状态”的数据库字段,虽然这是反模式不是?通过在存储的数据上应用业务规则而不是(冗余地)将状态存储在单独的字段中来“导出”当前状态是更可行的。这就是伪代码应该表明的内容。

2 个答案:

答案 0 :(得分:0)

根据您的编辑,我提出了以下方法:

enter image description here

您将通过(可选)授权和更新达到Draft州。如果它们失败,则重置状态机。

答案 1 :(得分:0)

我会建议一个关于这个问题的评论"每次转换包含两次"有点奇怪,我明白从一个状态你可以有几个由同一事件触发的转换,但在这种情况下,过渡有不同的守卫。我记得,符号是evt [后卫]。希望这有帮助。