《WF本质论》第一章OpenSesame我的实现
相关的背景可以看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我的实现相关推荐
- WF本质论第一章的代码
写书的那位大师丢三落四,代码没有拷贝完全,导致我花了些时间整理了这些代码,整理这些代码要感谢网上的一位老兄,可惜我不知道他的名字了. 今天在我的硬盘里发现了这些代码,决定发布上来共享.大家好才是真的好 ...
- 测试发布,无图版~《Windows Phone 7.5本质论》第一章
1 Windows Phone介绍 对一些人来说,手机是烦人的必须品;但对于其他人来说,手机却是不可或缺的.能够用手机随处拨打电话真的改变了人们的沟通方式.在过去的几年中,这些手机又有了新的飞跃.随着 ...
- Beginning WF4读书笔计 - 第一章 03设计示图及xaml代码
通过<Beginning WF4读书笔计 - 第一章 01创建一个简单的工作流>和<Beginning WF4读书笔计 - 第一章 02添加程序元素>的介绍后,本示例基本完成. ...
- 王道考研 计算机网络笔记 第一章:概述计算机网络体系结构
本文基于2019 王道考研 计算机网络: 2019 王道考研 计算机网络 个人笔记总结 后续章节将陆续更新- 目录 一.概念.功能.组成.分类 1. 计算机网络的概念 2. 计算机网络功能 3. 计算 ...
- 计算机组成原理-第一章
计算机组成原理第一章概述 一.计算机系统概述 1. 定义 2.分类 3.计算机系统的抽象层次 二.计算机系统的组成 1.计算机系统的硬件组成 1.1冯.诺依曼计算机(重点) 1.2现代计算机结构 1. ...
- 山西农业大学c语言答案,第一章C语言及程序设计概述-东北农业大学教务处.doc...
全国高等农林院校"十一五"规划教材 C语言程序设计 孙力 主编 中国农业出版社 内容简介 本书是全国高等农林院校"十一五"规划教材之一. 全书共11章,分别介绍 ...
- Python3-Cookbook总结 - 第一章:数据结构和算法
第一章:数据结构和算法 Python 提供了大量的内置数据结构,包括列表,集合以及字典.大多数情况下使用这些数据结构是很简单的. 但是,我们也会经常碰到到诸如查询,排序和过滤等等这些普遍存在的问题. ...
- 《零成本实现Web自动化测试--基于Selenium》第一章 自动化测试基础
第一篇 Selenium 和WebDriver工具篇 第一章 自动化测试基础 1.1 初识自动化测试 自动化测试有两种常见方式 1.1.1 代码驱动测试,又叫测试驱动开发(TDD) 1.1.2 ...
- 华南理工网络计算机基础知识,2019年华南理工大学网络教育计算机基础随堂练习第一章...
2019年华南理工大学网络教育计算机基础随堂练习第一章 (9页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 11.90 积分 第一章 计算机基础知识·第 ...
- CCNA 第一章 网际互联
第一章 网际互联 路由器知识点: 1.默认时,路由器不转发任何广播包和组播包. 2.路由器使用逻辑地址,逻辑地址在网络层的包头中,用来决定将包转发到的下一跳路由器. 3.路由器可以使用管理员创建的访问 ...
最新文章
- Linux安装Java、Maven、Mysql、RabbitMQ
- 升级bios_ThinkPad如何升级BIOS?我来教你!
- 【faster-rcnn】训练自己的数据集时的坑
- 阿里云 OpenAPI 开发者门户全新上线
- 孙叫兽进阶之路之软件测试基础知识
- python怎么读取石墨表格_Python用Pandas读写Excel
- 采用CXF+spring+restful创建一个web接口项目
- c语言贪吃蛇游戏编程视频教程,C语言贪吃蛇游戏精典源码 - 视频教程 - VC中文网-VC-MFC编程论坛 - Powered by Discuz!...
- es6继承 vs js原生继承(es5)
- Android源码下载编译(TI)
- 零基础快速自学SQL,1天足矣!
- OBS 卡顿原因 及 优化策略
- C++调用ffmpeg批量合并bilibili缓存视频
- Linux里面 update 和 upgrade 的区别
- 云渲染哪个平台好?哪个网渲平台比较便宜?
- 面试题:如果要画一只鸟和一个人,你会如何构图?
- 千万别在微社区太投入
- 关于知识付费项目的五大总结
- Mybatis-增删改查踩坑- attempted to return null from a method with a primitive return type (int).
- DosBox的使用,汇编代码编写,汇编语言,win10写汇编代码
热门文章
- STM32实现四驱小车(二)通信任务——遥控器SBUS通信
- 三级联动下拉列表的开发过程与范例
- java有关物流管理的简历_Java开发实习生大学生简历模板
- 如何在简历中编写Spark大数据项目经验
- 如何自己搭建测试环境
- 软件测试基础 ——— 测试分析
- 北大信科计算机考研专业真题,GitHub - sdmengxiangyu/kao_yan: 19年北大信科考研经验...
- asp毕业设计—— 基于asp+access的网上动态同学录系统设计与实现(毕业论文+程序源码)——同学录系统
- SVN server安装步骤
- Ant design的Table组件报错TypeError: rawData.some is not a function