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 ...
随机推荐
- [面试题] Find next higher number with same digits
Find next higher number with same digits. Example 1 : if num = 25468, o/p = 25486 Example 2 : if num ...
- Java 并发
参考:http://www.cnblogs.com/dolphin0520/category/602384.html
- #ifndef用于避免多重包含
原因:C中,某一个重要的头文件可能被多个文件包含,如果编译的多个文件均包含了同一个头文件, 就可能存在,一个头文件被多次包含的问题. 用法:这个问题,一般用#ifndef来解决. 1.定义一个与文件名 ...
- Hypothesis Testing
Hypothesis Testing What's Hypothesis Testing(假设检验) Hypothesis testing is the statistical assessment ...
- 批处理学习笔记12 - 拷贝大文件到特定目录 Copy命令
~z 获取文件容量大小,配合变量使用 copy 拷贝命令, copy 原地址 新地址 ok,下面上代码 @echo off setlocal enabledelayedexpansion for %% ...
- android stuido - 关闭单词拼写检查
"File"-"Settings"-"Editor "-"Inspections" 在Spelling栏取消选中,再点击 ...
- angular学习笔记(七)-迭代1
本篇介绍angular中元素的迭代: <!DOCTYPE html> <html ng-app> <head> <title>4.1.迭代</ti ...
- Ubuntu12.04下apache服务器的安装也配置
安装步骤 1.下载httpd http://httpd.apache.org/ 2.解压缩httpd tar vxzf httpd-2.4.6.tar.gz 3.安装httpd 进入解压缩后的目录 c ...
- VC++ 知识点
1.寻找文件时,CFileFind类的使用. 2.寻找目录时使用BROWSEINFO,其中包含了用户选中目录的重要信息. 3.LPITEMIDLIST类 4.目录选择对话框的使用SHBrowseFor ...
- RSS是什么,RSS怎么玩,RSS原理是什么 (zhuan)
http://www.cjjjs.com/paper/gzsh/201622721397372.aspx *********************************************** ...