Welcome

首页 / 软件开发 / .NET编程技术 / WF4.0实战(二十二):一个实际生活中状态机的例子

WF4.0实战(二十二):一个实际生活中状态机的例子2012-07-05 博客园 朱祁林这是实际生活中的一个状态机的例子:“门”。这个例子是Mebyon Kernow写的,使用状态机对门的状态进行控制,我觉得是学习WF4.0中 状态机的好例子。所以,简单的翻译了他这篇文章。希望对你学习WF4.0的状态机有所帮助。以下是正文。原文是:A practical State Machine example

现在,状态机的活动已经发布在Codeplex上面了(详见:http://wf.codeplex.com/)。我找出一个经常使用的例子。用这个例子用来演 示如何使用状态机来控制一个建筑物的进出(控制建筑物的门),以及展示一下状态机活动包中的主要功能。

这个例子的模型是对门的控制。宿主是一个WPF应用程序(WPF可以实现一些比较好的样式!)。想象一下,如果你去"开启"一个建筑物 。此时,每一个门都是关闭或者锁住的,这形成这个例子中状态机初始化的状态。因此,在状态机中我们需要等待一个事件触发来对门解锁 ,现实中可能要使用密码键盘或智能卡去开锁。这个例子的状态机的State和Transition如下图所示:

当用户提供自己的凭据来触发上图中的名字为Unlocked的Transition-这里你可能需要你传递PIN号码(或者卡上的号码)给Transition , 然后再查询数据库进行验证。这个例子中为了简单起见,没有任何验证。

从ClosedLocked状态出来,会存在三种可能性。一种是用户打开门;一种是因为一些原因又锁上门;一种是可能是他没有打开门,一段时 间过后自动锁上门,回到ClosedLocked状态。在这个状态上有三个Transition被执行,其中两个是等到事件发生,第三种是用了一个Delay 活动,时间设置为5秒钟。下面,我将会对State 和Transition进行解释,它们对理解状态机如何运作是至关重要的。