WF4.0——升级技能:泛型应用
前提:
在项目的开发中。我们知道,增加泛型,通过对类型的封装,进行抽象后。能够大大降低我们代码量,在项目中,泛型能够说是高级project师必备的技能之中的一个。也是面向对象的核心“抽象”的技术基础之中的一个,他这么牛,在工作流的开发中,我们不免就要考虑!
另一个技术,也是一个重要的内容,就是托付,在项目中,我们通过托付能够对层级之间。对象之间的关系即可解耦,将耦合延迟到执行状态时进行绑定,这样我们就能在修改较为少的前提下对项目的变动作出高速的反应!而在工作流的开发过程中。我们也是要增加的必备技术!(请关注我的下片博客)
原因:
以下给大家介绍我们为什么增加这两种技术的原因:
在普通的工作流开发中。我们在上篇博客中已经介绍过,他造成了一个严重的影响,就是结点太多了!
我们看一幅图(实际项目中的样例,非常有说服力)
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveHZzaHU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
大家认真观察不难发现,我们将近有几十个结点,而这些点的开发将是我们噩梦的開始。我们每一个人基本上都会发现,这个结点和其它几个结点仅仅有几个不同的地方。90%都是相似的。而我们却傻傻地写了全部的代码,聪明一点的。还会复制粘贴。可是我们是面向对象的project师。我们应该有更好的解决方式。
而这时。我们自觉想到了泛型,他就是对类型的抽象,有了它,我们就能够仅仅关心我们特定的逻辑,而依据client类型的确定,我们就能够复用公共的逻辑!
代码对照:
一般代码:
<span style="font-size:18px;">public sealed class Activity_ToDo : CodeActivity
{
// 定义一个字符串类型的活动输入參数
public InArgument<Login.Model.Entity.Case> CaseIn { get; set; }
public OutArgument<Login.Model.Entity.Case> CaseOut { get; set; } // 假设活动返回值,则从 CodeActivity<TResult>
// 派生并从 Execute 方法返回该值。
protected override void Execute(CodeActivityContext context)
{
Login.Model.Entity.Case info = new Login.Model.Entity.Case(); BaseEntityAbstract cache = new BaseEntityHelper();
cache.GetTableInfo(typeof(Login.Model.Entity.Case));
CommonData.Data.Core.SQLCore.SqlHelper sq = new CommonData.Data.Core.SQLCore.SqlHelper(); info.Id = CaseIn.Get(context).Id;
info.CaseName = CaseIn.Get(context).CaseName;
info.State = "正在办理";
info.InstanceID = CaseIn.Get(context).InstanceID;
info.UserId = CaseIn.Get(context).UserId; sq.Update<Login.Model.Entity.Case>(info);
info = sq.GetEntity<Login.Model.Entity.Case>("InstanceID", info.InstanceID); //CaseOut.Set(context, info);
context.SetValue(CaseOut, info);
//Login.Model.Entity.Case caseThisCon = context.GetValue(this.CaseOut);
}
}</span>
使用泛型之后的代码:
<span style="font-size:18px;">public sealed class CodeActivityevent<T> : CodeActivity
{ /// <summary>
/// 传入參数,案件实体
/// </summary>
public InArgument<T> CaseIn { get; set; } /// <summary>
/// 传出參数。案件实体
/// </summary>
public OutArgument<T> CaseOut { get; set; } /// <summary>
/// 运行创建案件
/// </summary>
/// <param name="context"></param>
protected override void Execute(CodeActivityContext context)
{
//获取实体操作类
BaseEntityAbstract cache = new BaseEntityHelper();
cache.GetTableInfo(typeof(Login.Model.Entity.Case));
CommonData.Data.Core.SQLCore.SqlHelper sq = new CommonData.Data.Core.SQLCore.SqlHelper(); //获取传入參数的两种方法
T CaseUse = CaseIn.Get<T>(context);
//调用业务逻辑层,将获取的实体传入,接收返回的实体,并将其付给传出參数 //TODO:基础活动:改动实体的逻辑层
//返回的案件实体CaseBack
T CaseBack = sq.Save(CaseUse); //将返回的实体传出
//CaseOut.Set(context, info);
context.SetValue(CaseOut, CaseBack); }
}</span>
代码对照结果
我们发现使用泛型后有几点优点:
1。代码复用,这样我们多有的保存操作都能够用一个代码活动解决
2,公共服务,我们规定好主要的代码结构后,想要给全部的公共服务添加一个功能。则仅仅需修改一个类就能够
我们又发现了几点工作流的优点:
1,解耦逻辑。在逻辑处理这一层大部分有工作流性质的业务能够使用工作流泽合逻辑处理层。而工作流就是xml文件。所以他的修改是一个解耦行为
2,扩充简单,我们在某一个小型复用工作流中。对其功能的扩充就是开发扩充模块。增加工作流就ok了
总结:
我们使用不论什么技术。只要这个技术存在的时间够长,我们有理由相信,我们遇到的问题,前人肯定遇到过,他们肯定通过N种方法攻克了这样的困难,我们要做的就是找到他,研究它,在这个技术基础上先进行公共服务抽象,然后就是详细业务的编写。我们这个过程中,我们的收货,不不过技术的获得。还有抽象理念的提升及面向对象的加深。像老师说,我们要在架构层面上进行开发。
WF4.0——升级技能:泛型应用的更多相关文章
- WF4.0——升级技能:托付应用
回想: 在一个月前,我们刚刚回想了面对象至关重要的部分:托付,详细请移步我们博客:面向对象--一起来复习托付与事件!关于这篇博客的详细内容,不再赘述,在这里我们主要讨论在工作流中的应用及他的详细怎样解 ...
- 【转】WF4.0 (基础篇)
转自:http://www.cnblogs.com/foundation/category/215023.html 作者:WXWinter —— 兰竹菊梅★春夏秋冬☆ —— wxwinter@16 ...
- jackson2.5.0升级到2.7.0
开发环境:spring-mvc4.1.7.jackson2.7.0 问题描述:项目中将原来的jackson2.5.0升级到2.7.0,导致服务调用出错. mvc相关的配置文件如下: <?xml ...
- 系统补丁更新导致MVC3.0.0升级到3.0.1的问题解决
在更新了系统补丁之后,会不知觉的将MVC3.0.0升级到MVC3.0.1的问题,解决的思路如下: 1.全部MVC引用使用NuGet进行包的管理. 2.单独把MVC库抽离出来,然后放在单独的项目文件夹, ...
- 基于WF4.0的公文管理系统
系统功能说明 公文管理 通过定义公文的基本信息,并将它按照工作流的定义流转实现公文的管理.包含以下功能: )公文创建:用户能够将格式化文本作为公文上传到系统中,并选择工作流启动流程. )公文审批:具有 ...
- .NET 4.0中的泛型协变和反变
转自:http://www.cnblogs.com/Ninputer/archive/2008/11/22/generic_covariant.html 随Visual Studio 2010 CTP ...
- WF4.0 基础篇 (十八) Flowchar
本节主要介绍WF4 中 Flowchart的使用 本文例子下载: http://files.cnblogs.com/foundation/FlowcharSample.rar 本文例子说明 Flowc ...
- .NET 4.0中的泛型协变和逆变
随Visual Studio 2010 CTP亮相的C#4和VB10,虽然在支持语言新特性方面走了相当不一样的两条路:C#着重增加后期绑定和与动态语言相容的若干特性,VB10着重简化语言和提高抽象能力 ...
- 李洪强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 ...
随机推荐
- javascript限定输入textarea输入长度
<textarea id="content" onkeyup="limitLength(this.value,'512','content')"> ...
- 进程间通信(java)--队列
前言: 在新增的Concurrent包中,BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的问题.通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大的便 ...
- java线程高并发编程
java线程具体解释及高并发编程庖丁解牛 线程概述: 祖宗: 说起java高并发编程,就不得不提起一位老先生Doug Lea,这位老先生可不得了.看看百度百科对他的评价,一点也不为过: 假设IT的历史 ...
- struts中action名称反复导致的神秘事件
近期由于项目需求变更.须要本人对当中的某个业务功能进行改动.本人依照前台页面找action,依据action找代码的逻辑进行了改动(公司项目是ssh框架,struts配置全部是通过注解的方式进行.配置 ...
- 【Asp.net之旅】--因自己定义控件注冊而引发的思考
前言 近期在开发远洋的SOA系统平台,开发使用的是.NET平台.对于Asp.net并不困难,但该系统的开发并非全然依靠Asp.net.而是自身封装好的框架.这套框架是远洋地产购买的微软的开发平台,项目 ...
- TRIZ系列-创新原理-9~11-预先反作用原理、预处理原理、预先防范原理
一.预先反作用原理表述例如以下: 1)预先给物体施加反作用,以补偿过量的或者不想要的压力. 假设知道系统在执行过程中,会有不利的或者有害的作用(负面作用)产生,则能够预先採取一定的措施来抵消.控制这样 ...
- DPDK
Intel DPDK 全面解读 高性能网络技术 随着云计算产业的异军突起,网络技术的不断创新,越来越多的网络设备基础架构逐步向基于通用处理器平台的架构方向融合,从传统的物理网络到虚拟网络,从扁平化 ...
- Yii2.0 权威指南
Yii 是一个高性能,基于组件的 PHP 框架,用于快速开发 Web 应用程序. 一.安装1.Composer 安装Composer是一个基于项目的依赖管理器,负责将PHP项目所依赖的包或库安装到项目 ...
- 每日英语:Robots To Revolutionize China
A new worker's revolution is rising in China and it doesn't involve humans. With soaring wages and a ...
- Freemarker-2.3.22 Demo - No01_获取模板并直接输出
package No01_获取模板并直接输出; import java.io.File; import java.io.FileOutputStream; import java.io.OutputS ...