我正在使用UML状态图建模一个进程。下面是一些伪代码,确定当前状态:如何使用状态图模拟此过程?
function getAccountState(customer) {
if (authorizationRequired(customer)) {
return State.AUTHORIZATION_REQUIRED
}
if (updateRequired(customer)) {
return State.UPDATE_REQUIRED
}
return State.DRAFT
}
不过,我认为这是有些奇怪,每个过渡包含两次。这个顺序很重要,但是这意味着,授权检查应该始终在第一位。
如何将这一过程中的一个模式?
编辑:
这个过程背后的背景是一个REST服务。该帐户被建模为一个资源,可以通过各种状态。任何时候请求资源时,服务都按上述伪代码所描述的顺序执行检查,以生成相应的表示。根据不同的答案,它包括两种:
- 链接到授权帐户如果帐户需要授权
- 一个链接,如果需要更新,以更新的姿态(然而,这可能只有一次的帐户是发生授权或没有被授权)
- 的链接完成帐户概况是否跟上时代的(可能是因为它不得不进行更新,并通过客户端更新,或者从来没有在被更新第1名)
上面的代码只是一个examp尽管如此。该服务还可以利用存储“状态”的数据库字段,虽然这是一种反模式不是?通过对存储的数据应用业务规则而不是(冗余地)将状态存储在单独的字段中来“派生”当前状态是更加可行的。这就是伪代码应该表明的内容。
你的代码并不代表一个状态机。目前尚不清楚auth-needed/upd.-req如何。操作影响整个系统。你也不能从一开始就转移两次。这将采取未确定/随机路径, –
代码应该表示“活动”状态的规则。例如。创建帐户时,该方法会被调用并可能会返回该帐户需要授权才能继续。在此操作(例如授权)之后,该方法会再次被调用,并且可能会返回需要更新配置文件的情况。如果没有,该帐户处于草稿状态。代码只能代表这个逻辑,这个代码在某些系统中并不存在。我只是想说明规则。 –
是的,我知道。但它只是返回操作返回的条件。这根本不是一台状态机。这只是一个简单的操作,返回一个条件值,意外命名为“状态”。 –