WF本质论 读书心得 1 剖析WF (下)

复合语句组件

接下来要做的是把OpenSesame分成若干小单元
第一次分割,将Read从OpenSesame中分离出来
OpenSesame中,调用了Read
这里的关键是,如何在Read完成执行后,通知调用者OpenSesame。
处理方法:在Read的Start/Run方法中使用一个书签,从而暂停了程序;Read执行完毕,最后一步恢复书签,通知了书签管理器BookmarkManager,激活了调用者OpenSesame的异步方法ContinueAt,使之得到了通知。

第二次分割,将剩余的OpenSesame割分为PrintKey和PrintGreeting
*注:每个活动的mgr都是属于自己本身的,之间没有联系
为此,建立活动的集合类ProgramStatementBlock:ProgramStatement,注意Run方法与ContinueAt方法的配合,使用了迭代技术; 以及通过runtime.RunProgram()方法,间接调用programStatement.Run(mgr)

最后,作一点小修改。注意到,ProgramStatementBlock仅仅是一个像{}样子的顺序流,此外还有其他的控制流(if,switch,for,while,foreach)——统称为复合语句组件,于是我们建立CompositeProgramStatement类,派生于ProgramStatement;而所有的控制流包括ProgramStatementBlock,都派生于这个复合类CompositeProgramStatement

接着创建了IfElse活动和While活动,以及Interleave活动。
    其中,InterLeave活动,并行的执行它所包含的语句组件,直至全部执行完毕。

为了防止ProgramStatement的方法被外界随便调用,将其声明为protected internal,从而只能由书签管理器间接调用。

* Done()方法,仅限于每个活动中都仅有一个Bookmark,而且没有参数;不然,要重载Done()方法,加上bookmarkName和payload这两个参数

*注:为了让所有的OpenSesame()方法格式统一,现在一致使用Start()取代Run()方法,将所有的BookmarkLocation变量名统一为bookmarkLocation,由此在原书代码上有所修改,但是使整章风格一致。

posted @ 2008-02-24 23:33  包建强  Views(680)  Comments(0Edit  收藏  举报