Workflow Foundation中LocalService服务类的改进
最近在项目中开始使用Workflow Foundation,使用状态机在asp.net下实现工作流。在Samples中看到的示例都是在LocalService服务类项目中加入各种事件来触发状态改状态的改变。但在实际项目中,我认为这种方法通用性不强,原因有三:一是每次流程发生变化时都需要更新LocalService;二是无法实现通用的自定义Activities;三是在asp.net的页面代码中需要根据当前状态触发不同的事件,但实际上理想的情况是,页面代码只需要通知状态机状态需要改变,具体如何改变、改变成何状态都不是页面代码关心的(当然这可以通过在web.config中配置状态与事件的对应关系来实现)。
下面是我对LocalService服务类的改进想法。
实际上我想实现的是,外界只通知状态机需要改变状态并且可以传参数给状态机,具体如何改变,改变为何状态都由状态机自己处理。
做过状态机工作流的兄弟都知道,之所以LocalService要随状态机的变化而改变是因为Samples中的示例告诉我们,要为每一个状态写一个Trigger,然后在外部根据状态机当前的状态触发相应的Trigger来驱动状态机改变状态。我的想法是,只做一个WFEventTrigger,然后把每个状态的handleExternal中的EventName都设为统一的WFEventTrigger。在每个状态的handleExternal中加入一个ifElseBranchActivity,condition是callme
private bool callme()
{
return this.tUserData["CurrentState"].ToString() == this.CurrentStateName;
}
this.tUserData["CurrentState"].ToString() 是在页面代码中送过来的参数,内容是在外部取到的状态机的当前状态。
这样就可以在外部使用通用的代码来触发状态改变。LocalService也不需要随状态机的变化而改变了。
希望能够和大家交流一下这么做有什么优缺点,谢谢!
下面是我对LocalService服务类的改进想法。
实际上我想实现的是,外界只通知状态机需要改变状态并且可以传参数给状态机,具体如何改变,改变为何状态都由状态机自己处理。
做过状态机工作流的兄弟都知道,之所以LocalService要随状态机的变化而改变是因为Samples中的示例告诉我们,要为每一个状态写一个Trigger,然后在外部根据状态机当前的状态触发相应的Trigger来驱动状态机改变状态。我的想法是,只做一个WFEventTrigger,然后把每个状态的handleExternal中的EventName都设为统一的WFEventTrigger。在每个状态的handleExternal中加入一个ifElseBranchActivity,condition是callme




这样就可以在外部使用通用的代码来触发状态改变。LocalService也不需要随状态机的变化而改变了。
希望能够和大家交流一下这么做有什么优缺点,谢谢!
作者:申健
出处:http://www.cnblogs.com/topiemie
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
出处:http://www.cnblogs.com/topiemie
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?