WF4.0——升级技能:委托应用

回顾:

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

对比:

普通实现:

工作流的理想实现:

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

代码示例:

<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做到业务逻辑的灵活变动和扩展的实现,但是什么样的抽象都是有限制的,抽象的粒度是要均衡的,经我们研究,对节点的抽象,及部分公共流程的抽象,是我们可以控制的范围之内,这样我们就可以尽量适应客户的变化!

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

时间: 2024-10-10 04:58:05

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

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

前提: 在项目的开发中,我们知道,加入泛型,通过对类型的封装,进行抽象后,可以大大减少我们代码量,在项目中,泛型可以说是高级工程师必备的技能之一,也是面向对象的核心"抽象"的技术基础之一,他这么牛,在工作流的开发中,我们不免就要考虑! 还有一个技术,也是一个重要的内容,就是委托,在项目中,我们通过委托可以对层级之间,对象之间的关系就行解耦,将耦合延迟到运行状态时进行绑定,这样我们就能在改动较为少的前提下对项目的变动作出快速的反应!而在工作流的开发过程中,我们也是要加入的必备技术!(请关

day04_oracle版本升级--10.2.0.1.0升级到10.2.0.4.0

软件升级 1.oracle很少升级,除非你要用什么新的功能.因为升级要停库,好多和库相关的组件可能全要升级.升级前一定要开会研究很长时间. 2.一些大公司定期委托第三方公司做<系统安全防护评测>,扫描出一些漏洞时,会要求升级并打补丁[联通] 神州数码信息服务股份有限公司.绿盟科技 如下形式的漏洞: 漏洞详细信息 Oracle数据库Network Foundation组件远程拒绝服务漏洞 详细描述 本次扫描是通过版本进行的,可能发生误报. Oracle Network Foundation是 O

UiAutomator2.0升级填坑记

UiAutomator2.0升级填坑记 SkySeraph May. 28th 2017 Email:[email protected] 更多精彩请直接访问SkySeraph个人站点:www.skyseraph.com 啰嗦 Google Android Developers 在2015年3月就发布了UiAutomator 2.0版本(下文简称U2),而公司的核心产品中用到还是UiAutomator老版本(下文简称U1),业界用U2的也不是很多,虽然有诸多问题和不便(如高版本OS中不支持Remo

OkHttpUtils-2.0.0 升级后改名 OkGo,全新完美支持 RxJava,比 Retrofit 更简单易用。

okhttp-OkGo 项目地址:jeasonlzy/okhttp-OkGo 简介:OkHttpUtils-2.0.0 升级后改名 OkGo,全新完美支持 RxJava,比 Retrofit 更简单易用.该库是封装了 okhttp 的网络框架,支持大文件上传下载,上传进度回调,下载进度回调,表单上传(多文件和多参数一起上传),链式调用,可以自定义返回对象,支持 Https 和自签名证书,支持 cookie 的持久化和自动管理,支持四种缓存模式缓存网络数据,支持 301 和 302 重定向,扩展了

linux内核升级(ubuntu12.04从3.13.0升级到3.4.0 )

花了一天的时间,终于把ubuntu12.04 的linux内核版本从3.13.0升级到3.4.0 升级后,系统更加稳定. 具体步骤:# wget http://www.kernel.org/pub/linux/kernel/v3.x/linux-3.4.tar.gz# tar zxvf linux-3.4.tar.gz -C /usr/src# cd /usr/src/linux-3.4# make menuconfig# make# make modules_install# cp arch/

MetroUICSS 2.0到3.0升级细节记录

Metro UI CSS 是一套用来创建类似于Windows 8 Metro UI风格网站的样式 其官网地址:http://metroui.org.ua/ 中文地址:http://www.bootcss.com/p/metro-ui-css/ 源码地址: https://github.com/olton/Metro-UI-CSS 这种前端框架没有Bootstrap.YUI流行,网上资料也不多.现在项目中用的这框架要从2.0升级到3.0,我在这里记录下各种细节. js包的替换,url的替换 but

Oracle升级_oracle 10g版本由 10.2.0.4.0升级为10.2.0.4.4(即PSU升级)

***************************************************************************************************** 续借上篇:Oracle升级_oracle 10g版本由 10.2.0.1.0升级为10.2.0.4.0(即CPU升级) ***********************************************声明***************************************

jackson2.5.0升级到2.7.0

开发环境:spring-mvc4.1.7.jackson2.7.0 问题描述:项目中将原来的jackson2.5.0升级到2.7.0,导致服务调用出错. mvc相关的配置文件如下: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.

精彩分享 ------ 将&quot;女朋友7.0&quot;升级到&quot;老婆1.0&quot;的Bug

亲爱的技术部: 我急需您的帮助.我最近将"女朋友7.0"升级到"妻子1.0",发现这个新程序意外地启动了孩子生产程序,而且占用了大量的空间和珍贵的资源.这在产品的 使用手册中没有提到.         此外"妻子1.0"自动将自己安装到其他的所有的程序中,它随系统同时启动,监控整个系统的状态."男人夜店2.5"和"迪吧5.3"无法再运行,一旦运行该程 序系统即行崩溃.试图运行"通宵麻将6.3&qu