回想:

在一个月前,我们刚刚回想了面对象至关重要的部分:托付,详细请移步我们博客:面向对象——一起来复习托付与事件!关于这篇博客的详细内容,不再赘述,在这里我们主要讨论在工作流中的应用及他的详细怎样解耦我们的业务,界面!

对照:

普通实现:

工作流的理想实现:

认真观察我们发现,状态信息有工作流自带的持久层维护,我们要做的和下文章的自然就变成了调用逻辑,在这一层,怎么解耦,就提上了日程,结果我们发现,解决问题,非托付不能胜任!详细的情况呢,请大家先看代码:

代码演示样例:

<span style="font-size:18px;"> public delegate T DelegateEvent<T>(T message);
public sealed class CodeActivityevent<T> : CodeActivity
{ /// <summary>
/// 传入參数,案件实体
/// </summary>
public InArgument<T> CaseIn { get; set; }
public InArgument<DelegateEvent<T>> WFEventIn { get; set; } /// <summary>
/// 传出參数,案件实体
/// </summary>
public OutArgument<T> CaseOut { get; set; } /// <summary>
/// 运行创建案件
/// </summary>
/// <param name="context"></param>
protected override void Execute(CodeActivityContext context)
{
//获取传入參数的两种方法
T CaseUse = CaseIn.Get<T>(context);
DelegateEvent<T> WFEvent = WFEventIn.Get<DelegateEvent<T>>(context);
CaseUse = context.GetValue(this.CaseIn);
//调用业务逻辑层,将获取的实体传入,接收返回的实体,并将其付给传出參数 //TODO:基础活动:改动实体的逻辑层
//返回的案件实体CaseBack
T CaseBack = WFEvent(CaseUse); //将返回的实体传出
//CaseOut.Set(context, info);
context.SetValue(CaseOut, CaseBack); }
}</span>

关键代码:

1,

<span style="font-size:18px;"> public delegate T DelegateEvent<T>(T message);</span>

2,

<span style="font-size:18px;">DelegateEvent<T> WFEvent = WFEventIn.Get<DelegateEvent<T>>(context);</span>
<span style="font-size:18px;"> //返回的案件实体CaseBack
T CaseBack = WFEvent(CaseUse);</span>

有了这些代码我们就可在设计工作流界面配置详细的操作,而操作在详细的类中并不写死,传入的方法是什么就是什么!

配置实现:



总结:

使用泛型后,详细运行方法也和前台进行了解耦,在显示层我们剩余的工作,就是收集数据,传入工作流,剩余的工作交予工作流处理,而工作流是我们配置出来的,通过配置工作流生成xml做到业务逻辑的灵活变动和扩展的实现,可是什么样的抽象都是有限制的,抽象的粒度是要均衡的,经我们研究,对节点的抽象,及部分公共流程的抽象,是我们能够控制的范围之内,这样我们就能够尽量适应客户的变化!

经过这一系列的抽象,我们发现,我们开发的工作流,已经脱离了我们当初简单使用的范畴,通过对泛型,托付的技术积累,我们对不论什么业务的抽象,都那么水到渠成,这时,我认识到一个道理,我们重要的不不过了解很多其它的技术,还有对技术应用场景的深入剖析,和面向对象认识的提升!

WF4.0——升级技能:托付应用的更多相关文章

  1. WF4.0——升级技能:泛型应用

    前提: 在项目的开发中.我们知道,增加泛型,通过对类型的封装,进行抽象后.能够大大降低我们代码量,在项目中,泛型能够说是高级project师必备的技能之中的一个.也是面向对象的核心"抽象&q ...

  2. 【转】WF4.0 (基础篇)

    转自:http://www.cnblogs.com/foundation/category/215023.html 作者:WXWinter  ——  兰竹菊梅★春夏秋冬☆ —— wxwinter@16 ...

  3. jackson2.5.0升级到2.7.0

    开发环境:spring-mvc4.1.7.jackson2.7.0 问题描述:项目中将原来的jackson2.5.0升级到2.7.0,导致服务调用出错. mvc相关的配置文件如下: <?xml ...

  4. 系统补丁更新导致MVC3.0.0升级到3.0.1的问题解决

    在更新了系统补丁之后,会不知觉的将MVC3.0.0升级到MVC3.0.1的问题,解决的思路如下: 1.全部MVC引用使用NuGet进行包的管理. 2.单独把MVC库抽离出来,然后放在单独的项目文件夹, ...

  5. 基于WF4.0的公文管理系统

    系统功能说明 公文管理 通过定义公文的基本信息,并将它按照工作流的定义流转实现公文的管理.包含以下功能: )公文创建:用户能够将格式化文本作为公文上传到系统中,并选择工作流启动流程. )公文审批:具有 ...

  6. WF4.0 基础篇 (十八) Flowchar

    本节主要介绍WF4 中 Flowchart的使用 本文例子下载: http://files.cnblogs.com/foundation/FlowcharSample.rar 本文例子说明 Flowc ...

  7. 李洪强iOS开发之-环信02.1_环信 SDK 2.x到3.0升级文档

    李洪强iOS开发之-环信02.1_环信 SDK 2.x到3.0升级文档 SDK 2.x 至 3.0 升级指南 环信 SDK 3.0 升级文档 3.0 中的核心类为 EMClient 类,通过 EMCl ...

  8. 【转】WF4.0实战系列索引

    转自:http://www.cnblogs.com/zhuqil/archive/2010/07/05/wf4-in-action-index.html 此系列的工作流文件案例比较多点,实用性好. W ...

  9. UiAutomator2.0升级填坑记

    UiAutomator2.0升级填坑记 SkySeraph May. 28th 2017 Email:skyseraph00@163.com 更多精彩请直接访问SkySeraph个人站点:www.sk ...

随机推荐

  1. 解决Jetty Maven Plugin:Please initialize the log4j system properly(转)

    解决Jetty Maven Plugin:Please initialize the log4j system properly.Jetty Maven Plugin环境: <plugin> ...

  2. Linux中查看进程及杀死进程命令

    Linux中想杀死fcitx进程,然后再重启它. root@www.linuxidc.com:/home/zhangbin# ps -e | grep 'fcitx' 3405 ?        00 ...

  3. Part Acquisition(spfa输出路径)

    Part Acquisition Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4080   Accepted: 1742 ...

  4. html 中的块级元素 内联元素

    上一个礼拜,做crm项目,使用的大部分都是js,nodejs,ajax 的内容,但是今天我想写写关于html中的块级元素和内联元素 的东西. 首先,html 中的块级元素 内联元素 我们可以看到,这两 ...

  5. DataTable 用linq分组查询

    DataRow drt = null; var tlist = dt.Select("Atmbs LIKE '%" + d["Two_Code"] + &quo ...

  6. unity学习中经常要碰到的几种数据结构

    常碰到的几种数据结构:1.Array,2.ArrayList,3.List<T>,4.LinkedList<T>,5.Queue<T>,6.Stack<T&g ...

  7. if else配对问题

    else语句总是与离它最近的if语句配对,所以在if语句的嵌套中一定要注意else语句与哪个if语句匹配 #include <iostream> using namespace std; ...

  8. [Swust OJ 1126]--神奇的矩阵(BFS,预处理,打表)

    题目链接:http://acm.swust.edu.cn/problem/1126/ Time limit(ms): 1000 Memory limit(kb): 65535 上一周里,患有XX症的哈 ...

  9. 枚举最短路径+SPFA

    Harry Potter and the Final Battle Submit Status Description The final battle is coming. Now Harry Po ...

  10. iPhone开发技巧之日志保存教程

    http://mobile.51cto.com/iphone-283337.htm Objective-C开发程序的时候,有专门的日志操作类NSLog,它将指定的输出到标准的错误输出上(stderr) ...