2008年3月18日
摘要: 如果您认为这篇文章主要讲“我”的人生经历,那就错了,我很少写感慨之类的文章。没有哗众取宠的意思,只是想说我是如何走上架构这条路的,以及架构的心得,并讲述我目前正在结构的内容。也为以后的文章做一个铺垫。 主要讲下面的几件事情: 项目à产品à平台的经过 架构心得 现在的架构内容 架构的完美性 阅读全文
posted @ 2008-03-18 09:47 李学斌 阅读(9562) 评论(30) 推荐(0) 编辑
  2007年6月25日
摘要: 自定义审核活动 前面已经讲了许多有关自定义活动在设计上需要注意的一些事项,但对于自定义审核活动来讲,我们的设计还要有许多工作要进行。为了简化用户的流程上的设计将流程的一些算法封装到自定义活动中可以大大增加自定义活动的使用的方便性。其直接的效果是从数十个活动减少到三四个,当然这只是针对电台文稿审核来讲的。而且基本上从根本上杜绝了IFELSE、WHILE等活动的使用,这可将用户条件编辑的复杂度降为0!... 阅读全文
posted @ 2007-06-25 10:14 李学斌 阅读(4456) 评论(14) 推荐(0) 编辑
  2007年6月11日
摘要: 自定义活动(五) 中止活动的运行 无论用停止、放弃、中止或中断等之类的这些词都不能很直接地表达我这里所表达的意思!这是目前为止我遇到的封装业务逻辑到自定义活动的最大障碍;因为就自定义审核活动来讲,用户所设计的工作流中每一个活动可能被多次执行。例如需要多个人参与同一个层次的审核,当条件不满足是便“停止”运行,然后等待下一个用户来输入用于计算的基础数据,并重新执行该逻辑,直到条件满足该活动执行完毕并过渡到下一个活动为止。需要特别说明一下,这里的自定义活动的逻辑包含了基础数据的读取,条件的判断及是否往下执行、原地等待还是回退的处理,而不是用一大堆WF预置的活动来支持,全部功能都封装于一个活动之内;另外这里不对回退进行说明,有关回退的内容请看后续的文章。 在WF的SDK中有一个很关键的术语“persistence point”,它决定了下次加载时WF实例开始运行的点。我将用这个词语来解释一些问题,让我们来看一下它在我们“中断”工作流中所产生的影响! …… 至此同一个活动可重复执行的问题得到了解决。至此自定义活动的话题也将结束。下面将针 阅读全文
posted @ 2007-06-11 09:17 李学斌 阅读(3627) 评论(15) 推荐(0) 编辑
  2007年6月5日
摘要: 自定义活动(四)保持状态的一致性及完整性上一节讲过,要完成一个审核活动所要处理的数据有下面的内容l工件进行编辑并进行保存l记录工件的审核情况l运行完后保存WF实例的状态通过上面我们可以看到在工作流活动运行之外我们还进行了一些数据的操作,就自定义审核活动来讲,在WWF的一些技术细节与应用体会(二)中我提到过活动执行的完整性及一些实现方法,在这里是用不上的,因为我们的部分数据在工作流之外进行了处理。我... 阅读全文
posted @ 2007-06-05 08:59 李学斌 阅读(3312) 评论(10) 推荐(0) 编辑
  2007年5月29日
摘要: 自定义活动(三) 锁定处理 在前面的文章我已经讲过,把用户数据的收集同工作流实例中分离出来。数据的存储也就很可能地进行了分离。这种数据的分离会要求我们去做更多的工作: l 维护工件(如稿件,任务等要在工作流中进行加工的东西)与工作流实例的关系。我们用WF自带的SqlWorkflowPersistenceService来完成工作流实例的存储。那么工件、工件与WF实例的关系及相关的处理情况应交给应用系统来维护。有关这方面的内容请看后面的“工作流的工件维护框架”。 l 保持工件与WF实例的状态一致性。这部分的解决请后后面的有关“状态一致性”的话题。 l 独占式处理。这是本节的重点内容。 独占式处理,其实处理过程很简单,就是在处理时对数据加把锁,就象进厕所把门锁上一样:)。这里不讲怎样去加锁,而是讲对哪些数据进行加锁以及何时进行加锁。 阅读全文
posted @ 2007-05-29 09:00 李学斌 阅读(3567) 评论(4) 推荐(0) 编辑
  2007年5月25日
摘要: 数据交换 要想使自定义活动能够通用,那么活动所需要的数据来源也必须遵循一定的规范才可以,然而这很难做到。那自定义审核活动来讲,它可能需要在三个方面的数据(实际还要多): l 用户设计工作流时指定用于审核的人员列表,指定那些人可参与这个审核活动。这里有一个技术点,就是如何实现自定义属性编辑器,这里不多讲。 l 工作流实例运行时获得当前用户信息,根据当前用户自定义审核活动可以判断此人是否可以执行此活动,即此人是否在用户列表中存在。如果不可以则中断活动的运行。有关如何中断活动的运行请看后面的文章。 l 活动执行时所需要的数据。业务工作流平台设计(四)中的“尽可能减少占有时间 ”中讲到将用户数据的收集从工作流中分离出来,以节省占有时间,同时也应将数据同工作流进行分离。工作流不负责这些数据的存储和查询,但自定义审核工作流会应用这些数据进行处理以决定该活动是否运行到下一步去;或是继续等待其它用户的审核;或是退回(可经修改再次提交审核);或是不被采用(不能再次提交审核)。 阅读全文
posted @ 2007-05-25 09:16 李学斌 阅读(4093) 评论(8) 推荐(0) 编辑
  2007年5月22日
摘要: 这一小节要讲的东西,目前我认为是最重要的东西。这是业务工作流平台中非常重要的一部分;;也是模板的重要组成部分。我们将从以下几个方面讲述自定义活动: 尽可能减少占有时间 数据交换 锁定处理 保持状态的一致性及完整性 中止活动的运行 以下是针对自定义审核活动特有的设计 功能逻辑的设计 回退与重新递交 跨审的实现 阅读全文
posted @ 2007-05-22 09:35 李学斌 阅读(4527) 评论(9) 推荐(0) 编辑
  2007年5月21日
摘要: 这里的要说明的重点是如何设计一个通用的最终用户可自行设计的编辑器,也就是说这个编辑器不只是应用于前篇文章所说的新闻系统。这里的技术点在于,每个应用系统都有自己特定的自定义活动,而这个设计器又如何去识别这些自定义活动。对于这个技术点来讲其实现还是比较简单的,那就是用“反射”。 来看一下我们的应用系统会有什么样的要求? 阅读全文
posted @ 2007-05-21 09:26 李学斌 阅读(4860) 评论(11) 推荐(0) 编辑
摘要: 的确正如别人所说的那样,WF只是一个foundation而不是一个platform,如果要实现完整的业务工作流平台支持,就这个平台的实现来讲,从技术上说不是很难,我想微软应该可以实现这一点,也许是下一个版本:)。或许就platform和foundation来讲,微软更看中的是foundation。总之现在的应用还是比较麻烦的事情。 阅读全文
posted @ 2007-05-21 09:15 李学斌 阅读(4361) 评论(6) 推荐(0) 编辑
  2007年5月17日
摘要: 如何有效地让客户自已去灵活地、随时随地地设计使用这些流程,而不需要工程人员或售后人员的干预是一个非常棘手的问题。客户关心的是流程中有几个环节。如果让用户自己去用IFELSE或WHILE去设计每一个环节的详细内容,则客户很快会否决这套系统,即使是技术熟练的工程人员也会皱眉的,维护成本会大幅的攀升的,而且开发人员还要为工作流设计器中的每一个条件做一些复杂和额外的工作。 阅读全文
posted @ 2007-05-17 09:15 李学斌 阅读(8700) 评论(16) 推荐(1) 编辑