1

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

function getAccountState(customer) {

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

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

    return State.DRAFT
}

我得到的最接近的是这张图: 状态图

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

如何为这个过程建模?

编辑:

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

  • 如果帐户需要授权,则为该帐户授权的链接
  • 如果需要更新,则提供更新配置文件的链接(但这只能在帐户获得授权或无需授权时发生)
  • 如果配置文件是最新的,则用于完成帐户的链接(因为它必须更新并由客户更新,或者它从来不需要首先更新)

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

4

2 回答 2

1

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

在此处输入图像描述

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

于 2017-02-22T10:51:01.750 回答
0

我建议对“每个转换包含两次有点奇怪”这一点发表评论,我理解从一个状态您可以有多个由同一事件触发的转换,但在这种情况下,转换有不同的保护。我记得,符号是 evt[guard]。希望这有帮助。

于 2017-02-22T13:44:50.000 回答