您的位置:首页 > 其它

将Web应用程序设置成有限状态机

2015-11-06 00:57 218 查看
虽然Web应用程序是目前最热门的主题,但它们的编程模型有别于传统的、非Web的应用程序,这为开发者带来了新的挑战。传统应用程序具有相当确定的控制流,但Web应用程序要针对不由自己控制的外部事件(HTTP请求)来采取行动和生成输出。

我们无法强迫这些事件按特定顺序发生,或者强迫在特定情况下发生,所以当用户采取非预料之中的操作时,必须特别小心地确保应用程序不会被打断。但是,针对Web编程模型所带来的问题,作为一种解决方案,让我们来看一看将Web应用程序建模为有限状态机的概念。这样一来,我们能创建可靠的应用程序,并可在任何情况下做出确定的响应。
什么是有限状态机


传统应用程序的控制流程基本是顺序的:遵循事先设定的逻辑,从头到尾地执行。很少有事件能改变标准执行流程;而且这些事件主要涉及异常情况。“命令行实用程序”是这种传统应用程序的典型例子。

另一类应用程序由外部发生的事件来驱动——换言之,事件在应用程序之外生成,无法由应用程序或程序员来控制。具体需要执行的代码取决于接收到的事件,或者它相对于其他事件的抵达时间。所以,控制流程既不能是顺序的,也不能是事先设定好的,因为它要依赖于外部事件。事件驱动的GUI应用程序是这种应用程序的典型例子,它们由命令和选择(也就是用户造成的事件)来驱动。

Web应用程序由提交的表单和用户请求的网页来驱动,它们也可划归到上述类别。但是,GUI应用程序对于接收到的事件仍有一定程度的控制,因为这些事件要依赖于向用户显示的窗口和控件,而窗口和控件是由程序员控制的。Web应用程序则不然,因为一旦用户采取不在预料之中的操作(比如使用浏览器的历史记录、手工输入链接以及模拟一次表单提交等等),就很容易打乱设计好的应用程序逻辑。

显然,必须采取不同的技术来处理这些情况。它能处理任何顺序的事件,并能提供有意义的响应——即使这些事件发生的顺序和预计的不同。有限状态机正是为了满足这方面的要求而设计的。

有限状态机是一种概念性机器,它能采取某种操作来响应一个外部事件。具体采取的操作不仅能取决于接收到的事件,还能取决于各个事件的相对发生顺序。之所以能做到这一点,是因为机器能跟踪一个内部状态,它会在收到事件后进行更新。为一个事件而响应的行动不仅取决于事件本身,还取决于机器的内部状态。另外,采取的行动还会决定并更新机器的状态。这样一来,任何逻辑都可建模成一系列事件/状态组合。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: