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 ...
随机推荐
- 查看mysql日志
1.首先确认你日志是否启用了 MySQL>show variables like 'log_bin'; 2.如果启用了,即ON那日志文件就在MySQL的安装目录的data目录下 3.怎样知道当前 ...
- [hihoCoder] #1089 : 最短路径·二:Floyd算法
时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 万圣节的中午,小Hi和小Ho在吃过中饭之后,来到了一个新的鬼屋! 鬼屋中一共有N个地点,分别编号为1..N,这N个地点之间 ...
- C++操作 SQL数据库 实例 代码步骤
C++连接SQL数据库第一步 系统配置 1.设置SQLSERVER服务器为SQL登录方式,并且系统安全性中的sa用户要设置登录功能为“启用”,还有必须要有密码. 2.需要在ODBC中进行数据源配置,数 ...
- GCC中文错误提示
最近在教人学c语言,英语不过关,想把ubuntu16.04的gcc改为中文提示,经查找后发现:目前(2016.8.5)基于gcc5.4版本的中文帮助好像还没有. 后来又仔细查找,现在最新的有中文的也就 ...
- iptables的自定义链--子链
我个人理解:子链的作用就是为了减少重复设置,有的时候可能对数据包进行一系列的处理,而且还被多种规则引用.这样就可以设置成子链,一起跳转过去处理. -j subchain 子链用-N来创建. iptab ...
- 如何对多个文件进行MODELSIM仿真? (由于是一个很大的项目,不可能把所有MODULE都放在一个文件里。 如何在ModelSim中对多个.V文件进行仿真?)
可以将所有要编译的所有文件的名字做一个list.新建一个文本文档,重命名为vflist vflist内容例子如下(src为文件夹):src/base_addr_chk.vsrc/config_mux. ...
- 【转】Linux删除文件未释放空间问题处理
linux里的文件被删除后,空间没有被释放是因为在Linux系统中,通过rm或者文件管理器删除文件将会从文件系统的目录结构上解除链接(unlink).然而如果文件是被打开的(有一个进程正在使用),那么 ...
- 安卓手机数据恢复软件-DiskDigger Pro
以前的手机是支持大容量存储模式,可以被分配到盘符,但是自从手机不支持U盘大容量存储模式只能MTP模式之后,想要做数据恢复麻烦了很多啊! 经过多方查找,终于找到了这个能在手机上用的软件DiskDigge ...
- SQL Server FOR XML PATH 语句的应用---列转行
经常在论坛看到高手使用了 for xml path,由于是搜索一下,记录了详细的使用方法.在SQL Server中利用 FOR XML PATH 语句能够把查询的数据生成XML数据,下面是它的一些应用 ...
- win7语言设置为英语
控制面板,地区和语言 可以设置格式 键盘和语言 安装显示的语言 选择“可选更新包”,选择语言的语言