浅谈简单工作流设计——责任链模式配合策略与命令模式的实现.docxVIP

浅谈简单工作流设计——责任链模式配合策略与命令模式的实现.docx

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
浅谈简单工作流设计——责任链模式配合策略与命令模式的实现

浅谈简单工作流设计——责任链模式配合策略与命令模式的实现本文以项目中的一个工作流模块,演示责任链模式、策略模式、/command/命令模式的组合实现!流程简介最近在做的一个项目,涉及到的是一个流程性质的需求。关于工程机械行业的服务流程:服务任务流程和备件发运流程。项目之初,需求不是很清晰,算是演化模型吧。先出一个简单版本,然后根据用户的使用情况,再进一步探测新需求。所以也就是说这两个流程中的每一步暂时都不是固定的,而应该是可配置、可增减的。目前暂定的两个流程示意图如下:?以上为两个流程的大致过程,当然实际过程中,可能还要走其他的流程。但是,仔细分析,你会看到。不管有多少个中间步骤,它们始终都对应着它们在该流程中所处的状态:/// /command/su.htmlsummary /// 服务流程状态枚举 /// /summary public enum MaintanStateEnum { non_assign, //已创建,待分配 non_accept, //已分配,待接收 maintaining, //已接收,服务中 non_confi/command/rm.htmlrm, //完成服务,待确认 non_userConfirm, //已确认,待客户确认 non_feedback, //客户已确认,待回访 feedbacked, //回访完成,流程结束 goback //退回分配,此为动作,为了方便编码,不对应服务状态 }你会看到non_后面跟的都是一个个动作。在这里分清状态和动作是很重要的,不然就很难理清了。还有有时一个动作对应着前后状态,不要出现重复的状态比如:created(创建完成)和non_assign(待分配)在这里就是所谓的重复状态。 这些状态其实就是贯穿着整个流程的主线,类似于一个城市的主干道一样。我们只要抓着这样一天线索来思考,就能够化繁为简。每个步骤可配置,各个步骤不相耦合,实现调用端一致性——责任链模式而责任链模式,正是为此而生的!在这里,我采用了责任链模式来封装这种步骤的不确定带来的变化。首先我们有必要先了解一下,什么是责任链模式:职责链模式(Chain of Responsibility):使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。适用场景:1、有多个的对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定;2、在不明确指定接收者的情况下,向多个对象中的一个提交一个请求;3、处理一个请求的对象集合应被动态指定。?可以看到无论是上面哪种场景,都存在一个多对一的关系。在这个流程中,一很明显对应着服务流程(说白了就是数据库服务任务的一条记录)。大部分情况下,我们都在完成对一条服务中相关字段的修改,同时置不同的服务状态。而多,在这里应该对应着不同的步骤。下面来看看实现:/// summary /// 维修服务 处理器-抽象基类 /// /summary public abs/command/tr.htmltract class ServiceHandler { protected ServiceHandler n/command/ex.htmlextHandler; public virtual vo/command/id.htmlid Handle(Maintena/command/nc.htmlnceForm maintenanceForm, object otherParams) { if (nextHandler!=null) { nextHandler.Handle(maintenanceForm, otherParams); } } }这是一个抽象处理器,流程中每个步骤的处理器,会覆写这个处理器的处理方法: 创建: /// summary /// 创建服务单流程--应对接线员/服务接收员角色【或者其他具有创建权限的其他角色】 /// /summary public class CreateHanlder:ServiceHandler { public override void Handle(MaintenanceForm maintenanceForm, object otherParams) { //如果已创建(未分配) if (maintenanceForm.CurrentState==MaintanStateEnum.non_assign) { //创建该服务单 return; } e/command/ls.htmllse //已分配,则传递给下一个流程(假定为

文档评论(0)

pangzilva + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档