工作流
一概述
WF是在windows平台上开发具有工作流功能的应用的 编程模型,运行环境和工具
Windows平台上统一的工作流技术
—平台级的技术
—适用于绝大部分场景
对传统工作流技术的扩展
—包括人工活动和系统活动
—灵活的流程控制:顺序, 状态机, 基于规则
领导新的工作流方向
—一致和熟悉的模型,开发者容易接受
—强大的合作伙伴和解决方案生态系统
活动(Activity):工作流由活动组成
活动运行在宿主(Host)进程中:任意应用或者服务器
用户自定义活动(Customer Activity Library)
组件
基本活动库:平台自带的活动
运行时引擎:运行工作流,状态管理
运行时服务:为宿主提供灵活性,管理通讯
定义工作流:
可以用代码表达:工作流是一个类
<?Mapping XmlNamespace="Activities" ClrNamespace="System.Workflow.Activities" Assembly="System.Workflow.Activities" ?>
<SequentialWorkflow x:Class="MyWorkflow" xmlns="Activities" xmlns:x="Definition">
…
< quentialWorkflow>
二 活动 的概念
活动是工作流中的一个步骤
属性和事件:用户用代码定制
方法:仅能被运行时引擎调用
类比表单和控件
活动 == 控件
工作流 == 表单
活动可以分成两类
基本活动 – 原子动作
复合活动 – 管理子活动
Activity 是搭建Workflow的积木
一个逻辑执行单元,可重用的部件
基本的Activity是Workflow中的一个步骤
复合的Activity包含其它的Activity,比如: Sequence
基本活动库(Base Activity Library)包含了一组Activity的集合
第三方将提供更多的Activity,比如: “ApproveOrder”
Activity 是一个类:
Activity的属性和事件被工作流使用
Activity的方法被Workflow的运行时调用 (比如: Execute方法)
Activity可以被编译到Workflow中,也可以以活动库的形式单
独提供
生命周期 Activity
InvokeWorkflow
Suspend
Terminate
事件 Activity
EventDriven
Listen
Delay
HandleExternalEvent
复合活动:
复合活动在所有子活动完成时完成
复合活动负责管理子活动的执行,和子活动的执行模式(顺序,条件,循环,并行. . .)
通过 IActivityEventListener 侦听所有子活动的状态改变(close)
并行执行:
ParallelActivity允许并行执行其子分支
ParallelActivity依次执行每一个分支的第一个Activity
当遇到阻塞时,转去执行其它的分支
当所有的分支都执行完, ParallelActivity结束
同步执行:
ParallelActivity允许并行执行其子分支
SynchronizationScopeActivity 允许多个并行活动被同步执行
通过同步句柄来管理同步执行
自定义活动:
什么是自定义活动:
WF为我们提供了一组”内置”活动(Code,While…)
用户也可以根据创建自己的活动
新的活动可以被用于工作流中
用户可以自行规定活动的功能,执行逻辑和主体风格
自定义活动可以以组件的方式提供给其它人使用
为什么要自定义活动
WF的基本活动很有限
需要更多的活动封装业务逻辑
减少用户使用的复杂性
提供更贴近现实的风格
如何自定义活动
从Activity(或其子类)继承出一个类来
复写Execute方法
制定新活动对外交互的方式(DependencyProperty等)
为新活动指定风格
ActivityDesigner
ActivityValidator
三工作流形态
工作流三种形态:
顺序工作流
状态机工作流
规则驱动的活动
什么是状态机工作流
工作流本身由一组状态组成。
存在一个初始状态。
每个状态都可以接收一组特定事件。
视事件而定,可以转换到另一个状态。
状态机工作流可以有最终状态。
当对最终状态进行转换时,工作流将完成
什么时候使用状态机工作流?
影响工作流程的一些重要的选择是否发生在工作流外部(out of workflow)?
是否由用户进行控制?
是否发生了“goto” 操作?
为什么要使用规则驱动的工作流?
顺序和状态机工作流不能满足复杂的流程需要
工作流执行中需要更改规则
复杂的策略
规则种类:
代码规则(Code Condition)
通过一个返回布尔值的方法作为规则
规则写死在代码中
规则文件(Rule Condition)
规则写在.rules的XML文件中
运行时可以更改
规则集合(Rule Set)
一个规则的集合
每个规则采用If-Then-Else的方式
可定义优先级
规则驱动的活动
采用Code Condition和Rule Condition的Activity
IfElseBranch
While
Replicator
ConditionedActivityGroup (CAG)
采用Rule Set的Activity
PolicyActivity
四宿主和运行时间
宿主是WF运行的容器
宿主提供WF运行的底层服务(线程,安全)
宿主可以是任意的.NET进程
什么是WF Runtime
WF Runtime运行在宿主中
WF 实例运行在WF Runtime中
WF Runtime负责WF实例的运行,状态维护,生命周期等
WF Runtime加载各种服务,完成特定的功能(调度,通讯,持久化等)
一个WF Runtime中可以运行多个WF实例
宿主(Host)
任意.NET进程
Windows SharePoint Services
IIS/ASP host
BizTalk 2006
Dynamics 未来版本
Office 2007
运行时服务
监控服务
持久化服务
其他
——唐月华
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?