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 ...
随机推荐
- Python 爬虫 数据提取
一下子运行 七八十个 select 将会是什么样的体验呢? 业务部门提供了一个需要,要求从爬虫数据中提取出88家的数据, 并且也提供了一个excel表格,如下图: 这个时候我们可以通过拍卖行,拍卖时 ...
- mysql开启skip-name-resolve 导致root@127.0.0.1(localhost)访问引发的ERROR 1045 (28000)错误解决方案
为什么配置skip-name-resolve? 由于mysql -h${ip} 远程访问速度过慢, mysql -uroot -p123456 根据网友经验(https://www.cnblogs.c ...
- unity, 查看内置shader源码
1,建一个球体. 2,建一个材质,将材质拖到球体上. 3,在材质的shader下拉列表中选择想查看的内置shader,点材质栏右上设置按钮->Select Shader 进入shader面板. ...
- PHP遍历目录返回统计目录大小实例
分享一个 PHP遍历目录并返回统计目录大小的方法.代码: <?php $dirname = "test1"; //mkdir($dirname); //遍历一层目录 func ...
- Altera FPGA管脚弱上拉电阻详细设置方法
Altera FPGA管脚弱上拉电阻的软件设置方法 在使用 Altera 的 FPGA 时候, 由于系统需求, 需要在管脚的内部加上上拉电阻. Quartus II 软件中在 Assignment E ...
- Centos7安装TensorFlow
TensorFlow也火了一段时间,想想既然要研究NLP.为什么不好好应用一下Google开源的Deep Learning平台呢,一切还是先从搭建好开发环境開始. 非常多大神们也做了这方面的工作.汲取 ...
- linux服务器文件删除空间却未释放
在Linux或者Unix系统中,通过rm或者文件管理器删除文件将会从文件系统的目录结构上解除链接(unlink),然而如果文件是被打开的(有一个进程正在使用),那么进程将仍然可以读取该文件,磁盘空间也 ...
- 特效effects
Test中使用的特效如下 首先,使用ccg(x,y)建grid,一个Grid 属性就好像一个矩阵,是一个网络的线,组成一系列的方块和矩阵. 一个(16,12)大小的grid将会运行的非常快,但是并不会 ...
- Oracle行转列SQL
-- Create table /*create table TEST_TABLE ( STUDENT VARCHAR2(200), SUBJECT VARCHAR2(200), GRADE NU ...
- Ubuntu 12.04下jdk的安装与配置
由于要开始在linux下学习jsp的开发,所以就准备自己动手配置一下jdk和tomcat jdk 下载地址: http://www.oracle.com/technetwork/java/javase ...