zoukankan      html  css  js  c++  java
  • 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,由此在原书代码上有所修改,但是使整章风格一致。

  • 相关阅读:
    poj 2728 Desert King
    uva 439 Knight Moves
    hdu 1875 畅通工程再续
    scau实验题 8600 骑士周游问题(有障碍物)
    scau实验题 8596 Longest Ordered Subsequence
    poj 1679 The Unique MST
    uva 527 Oil Deposits
    poj 2533 Longest Ordered Subsequence
    .net 程序员 java 开发入门
    Collation conflict occur at operation on User define funtion & table's column
  • 原文地址:https://www.cnblogs.com/Jax/p/1079902.html
Copyright © 2011-2022 走看看