您如何表示可以在状态图中修改程序状态的异步操作?

时间:2013-11-06 14:41:56

标签: uml statechart

我有一个动作可以完成两件事,首先它会改变应用程序状态,第二部分会调用web服务。当webservice发送响应时,它将影响当前的应用程序状态。Example statechart

假设我有上述设置。 Method1()调用网络服务并导致状态从A更改为B。在Method1()调用Finish()来电之后,状态可以从B更改为CB更改为Success等。

如果B更改为Success,它也可能会从Success更改为C

如果可以在Success行动后的任何时间点设置状态,我将如何处理FailMethod1()状态?

2 个答案:

答案 0 :(得分:1)

我不确定真正理解你的整个问题但是为了设计你的问题,我会使用事件。 当事件发生时可以触发转换,因此我将创建“ReceiveResponse”事件以及状态B和决策节点之间的转换(如下所示)。 这模拟了这样一个事实,即如果状态机处于状态B并且接收到响应,则触发转换,并且根据响应的值,将更改从B到成功或失败的状态。

Modelio state machine

也许你能描述一下可能的过渡或状态吗?你的对象可能同时处于两种状态吗?

希望它有所帮助,

EBR

答案 1 :(得分:0)

我建议使用序列图。

  1. 序列图允许类/组件方法的异步调用。 (或由表示为方法的事物处理的http请求)这正是您所需要的。您可以将序列图的重点放在多个控制流上,以达到一定的效果。

  2. 状态图确实很低级,可能很难映射到这个域。但是,如果必须,您的所有方法/交互必须重新设置为状态更改,NOT,调用。状态机在状态之间移动,而不是方法和类。所以你的状态转换必须是"接收值为A"的B的消息。不是我怀疑你想要的。它无助于我理解你的系统。

  3. 如果您需要这样做,因为您正在进行MDA / Generative UML,那么请大大扩展您的问题。我假设这是一个基本的UML问题,如果不让我知道,我可以添加更多细节。