相关的背景可以看http://www.cnblogs.com/cloudjun/archive/2009/04/04/1429299.html,有机会的建议看书。

刚开始看这本书,第一次接触第一章的这写概念,代码省略的地方多了,看的感觉有点断层。网上初略的找了一下源代码,发现作者自己居然没有提供,能找到的其他实现都没有100%的实现,即不是一个真正可运行的示例代码。为了能够更深入的理解,我自己按照书中给出的轮廓做了一个自己的实现。我的实现中,并不是100%依照书中的描述,有一些是根据自己的理解改进的,比如我的实现中BookmarkManager类并没有Done方法,语句的状态,被定义到了ProgramStatement这个父类中,我认为Done这个动作是语句自身的状态的一种,和书签管理器本身没什么关联。书签的删除也从语句中移到了异步调用完毕(既ContinueAt方法调用之后),这样更合理,在书签管理器中删除书签。增加了一些书中提到的但是跳过的(常用理由:不是本章内容),比如BooleanExpression的实现(同样使用了代理来实现,顺带的及其简单的实现了数据绑定),BookmarkNotFoundException,钝化(使用System.Runtime.Serialization.Formatters.Binary来实现,目前发现.Net Framework也只有它能实现这个循环引用外带委托的类的序列化,其他的其中DataContractSerializer不支持循环引用,SOAP格式不支持委托,XML序列化没尝试,我想到DataContractSerializer内部似乎使用了XML序列化)等。还有一些改动是按照书中所述很难实现的改动,记不清楚是哪些地方了,这个示例代码陆陆续续的写了2个星期。

没有实现或完整实现的内容包括,最后的几张数据库表,因为实现解析器真不是本章内容了 :) ,我简单的使用了C#本身来代替。书中提到书签恢复之间的约束等(我感觉不是重点,而且加大了示例代码的复杂度),数据绑定等。

  Program中假定了2种情况,一种是一次运行完毕(all),另一种是运行到需要输入的时候钝化(part1, part2),等待输入以后激活继续运行。实际上是可以在任何一个书签点钝化的,只不过OpenSesame中的逻辑中只有等待输入时候需要挂起,因此就按照这个逻辑设计了另外一种执行方式。

另外,Program中的书签是面向输入和Key一致的情况,如果输入和Key不一致会引发BookmarkNotFoundException,原因是PrintGreeting没有被执行,所以没办法恢复这个书签。这种情况应该是正常的,书签是由MythicalRuntime的客户端自己保管的,如果需要可以判断然后使用不同的书签,我的实现中没有提供对这种情况的支持。

示例代码下载。

转载于:https://www.cnblogs.com/wenhx/archive/2010/07/29/EssentialWF_1_OpenSesame.html

《WF本质论》第一章OpenSesame我的实现相关推荐

  1. WF本质论第一章的代码

    写书的那位大师丢三落四,代码没有拷贝完全,导致我花了些时间整理了这些代码,整理这些代码要感谢网上的一位老兄,可惜我不知道他的名字了. 今天在我的硬盘里发现了这些代码,决定发布上来共享.大家好才是真的好 ...

  2. 测试发布,无图版~《Windows Phone 7.5本质论》第一章

    1 Windows Phone介绍 对一些人来说,手机是烦人的必须品;但对于其他人来说,手机却是不可或缺的.能够用手机随处拨打电话真的改变了人们的沟通方式.在过去的几年中,这些手机又有了新的飞跃.随着 ...

  3. Beginning WF4读书笔计 - 第一章 03设计示图及xaml代码

    通过<Beginning WF4读书笔计 - 第一章 01创建一个简单的工作流>和<Beginning WF4读书笔计 - 第一章 02添加程序元素>的介绍后,本示例基本完成. ...

  4. 王道考研 计算机网络笔记 第一章:概述计算机网络体系结构

    本文基于2019 王道考研 计算机网络: 2019 王道考研 计算机网络 个人笔记总结 后续章节将陆续更新- 目录 一.概念.功能.组成.分类 1. 计算机网络的概念 2. 计算机网络功能 3. 计算 ...

  5. 计算机组成原理-第一章

    计算机组成原理第一章概述 一.计算机系统概述 1. 定义 2.分类 3.计算机系统的抽象层次 二.计算机系统的组成 1.计算机系统的硬件组成 1.1冯.诺依曼计算机(重点) 1.2现代计算机结构 1. ...

  6. 山西农业大学c语言答案,第一章C语言及程序设计概述-东北农业大学教务处.doc...

    全国高等农林院校"十一五"规划教材 C语言程序设计 孙力 主编 中国农业出版社 内容简介 本书是全国高等农林院校"十一五"规划教材之一. 全书共11章,分别介绍 ...

  7. Python3-Cookbook总结 - 第一章:数据结构和算法

    第一章:数据结构和算法 Python 提供了大量的内置数据结构,包括列表,集合以及字典.大多数情况下使用这些数据结构是很简单的. 但是,我们也会经常碰到到诸如查询,排序和过滤等等这些普遍存在的问题. ...

  8. 《零成本实现Web自动化测试--基于Selenium》第一章 自动化测试基础

    第一篇 Selenium 和WebDriver工具篇 第一章 自动化测试基础 1.1    初识自动化测试 自动化测试有两种常见方式 1.1.1 代码驱动测试,又叫测试驱动开发(TDD) 1.1.2 ...

  9. 华南理工网络计算机基础知识,2019年华南理工大学网络教育计算机基础随堂练习第一章...

    2019年华南理工大学网络教育计算机基础随堂练习第一章 (9页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 11.90 积分 第一章 计算机基础知识·第 ...

  10. CCNA 第一章 网际互联

    第一章 网际互联 路由器知识点: 1.默认时,路由器不转发任何广播包和组播包. 2.路由器使用逻辑地址,逻辑地址在网络层的包头中,用来决定将包转发到的下一跳路由器. 3.路由器可以使用管理员创建的访问 ...

最新文章

  1. Linux安装Java、Maven、Mysql、RabbitMQ
  2. 升级bios_ThinkPad如何升级BIOS?我来教你!
  3. 【faster-rcnn】训练自己的数据集时的坑
  4. 阿里云 OpenAPI 开发者门户全新上线
  5. 孙叫兽进阶之路之软件测试基础知识
  6. python怎么读取石墨表格_Python用Pandas读写Excel
  7. 采用CXF+spring+restful创建一个web接口项目
  8. c语言贪吃蛇游戏编程视频教程,C语言贪吃蛇游戏精典源码 - 视频教程 - VC中文网-VC-MFC编程论坛 - Powered by Discuz!...
  9. es6继承 vs js原生继承(es5)
  10. Android源码下载编译(TI)
  11. 零基础快速自学SQL,1天足矣!
  12. OBS 卡顿原因 及 优化策略
  13. C++调用ffmpeg批量合并bilibili缓存视频
  14. Linux里面 update 和 upgrade 的区别
  15. 云渲染哪个平台好?哪个网渲平台比较便宜?
  16. 面试题:如果要画一只鸟和一个人,你会如何构图?
  17. 千万别在微社区太投入
  18. 关于知识付费项目的五大总结
  19. Mybatis-增删改查踩坑- attempted to return null from a method with a primitive return type (int).
  20. DosBox的使用,汇编代码编写,汇编语言,win10写汇编代码

热门文章

  1. STM32实现四驱小车(二)通信任务——遥控器SBUS通信
  2. 三级联动下拉列表的开发过程与范例
  3. java有关物流管理的简历_Java开发实习生大学生简历模板
  4. 如何在简历中编写Spark大数据项目经验
  5. 如何自己搭建测试环境
  6. 软件测试基础 ——— 测试分析
  7. 北大信科计算机考研专业真题,GitHub - sdmengxiangyu/kao_yan: 19年北大信科考研经验...
  8. asp毕业设计—— 基于asp+access的网上动态同学录系统设计与实现(毕业论文+程序源码)——同学录系统
  9. SVN server安装步骤
  10. Ant design的Table组件报错TypeError: rawData.some is not a function