今晚整理了一下前段时间做的一个小型工作流应用程序,其核心的功能块是用的Csla框架试用开发,今天就对Csla框架中的命令对象做下个人理解。

众所周知,在工作流的开发过程中,可以分为流程定义过程、流程运行过程和工作任务的跟踪,特别是流程实例运行的过程中,主要的实现可以总结为流程实例创建、任务提交、任务回退、办结、抄送等等,其中的每个功能具有一定的相对独立性,而且大多数的操作都是命令提交后一次性办理,基于这种想法,自己在实现过程中对于上述的功能使用Csla框架的命令对象进行实现。

区别于Csla框架中的其他对象,可以说它的基本代码块是所有的对象类型中最简单的,代码中只有静态工厂方法及命令的执行代码DataPortal_Execeut(),它可以存在于其他对象内部,作为内部类来被外层类调用,也可以公开类型被其他所有代码使用,而且命令对象的初始化是在客户端,所以可以在客户端对命令对象及内部成员进行初始化,也可以在传递到服务端之前在客户端进行数据的有效性验证,其中运行在服务器端的方法只有DataPortal_Execeut()。它可以只是一个简单的进行一项数据个数的统计,也可以复杂到调用另外其他的N个类来实现此次命令操作,并且可以将操作的结果反应在字段中供客户端进行接收。下面就贴出一个简化后的命令对象:

1: /// 2: /// 分发抄送信息3: /// 4: [Serializable]5: public class ShareNode : Csla.CommandBase6: {7: //抄送的节点ID8: private int _NodeID;9:10: //要抄送的用户列表11: private List _ShareUser;12:13: private ShareNode(int nodeID, List shareUser)14: {15: this._NodeID = nodeID;16: this._ShareUser = shareUser;17: }18:19: public static void Execute(int nodeID, List shareUser)20: {21: ShareNode com = new ShareNode(nodeID, shareUser);22: com = DataPortal.Execute(com);23: }24:25: protected override void DataPortal_Execute()26: {27: if (_NodeID == null || _NodeID <= 0 || _ShareUser == null || _ShareUser.Count <= 0)28: {29: return;30: }31: foreach (var item in _ShareUser)32: {33: ShareNode data = ShareNode.NewShareNode();34: data.ID = _NodeID;35: data.Date = DateTime.Now.ToString();36: data.ShareUser = item;37: data.ReadDate = DateTime.MaxValue.ToString();38: data.State = false;39: data.Type = ShareType.Node.ToString();40:41: data.Save();42: }43: }44: }

上面是自己以前实现的一个简单的流程抄送功能,其中,抄送的命令对象ShareNode是在客户端调用工厂方法进行实例化的,并且通过调用私有构造方法进行对字段初始化(在实例化前可以对传递的参数进行验证,避免到服务器端后才发现初始化数据有误)。调用实例的Execute方法实例对象的移动,在服务端(当然也可能是配置在本地)调用DataPortal_Execute方法,在内部实现自己需要实现的功能。在这里只是一个简单的数据操作,如果复杂的话命令对象还可能会返回更复杂的对象类型,无论是在客户端还是在服务器端还可能存在更复杂的业务代码。

自己感觉,简单的看它,它只是一个访问远程代码的入口,就像是调用wcf其中一个方法那样,但从它的名称“命令对象”中看得出,作者将命令这种东西也作为了对象进行看待,就像是自己在实现工作流中,其中每个命令都可以作为一个命令对象的方式存在,第一感觉就是清晰,无论命令对象里面进行了如何复杂的代码实现。可能需要注意的是命令的执行过程如果操作多次数据库的话就需要将对象的方法标识为事务属性以防万一。

框架中的每种类型的对象都有其使用的条件,就像是这种命令对象,在处理命令操作中可以发挥出它的灵活性。

当然,这种用法是站在使用此框架的角度来思考,除此之外还有很多办法可以实现,还有就是不同的情景对于一个框架来说也可能不适合。还是那句,用它,是为了在使用过程中学习更多的知识。

最后需要注意的是,在框架中,所有的业务对象,包括条件对象(Criteria) 都要标识为可序列化!这点我想在平常类的使用中也是要标识的...

csla java_Csla框架之命令对象理解相关推荐

  1. linux八进制属性,解释八进制和linux命令od +理解0x00(Explain Octal and the linux command od + understanding 0x00)...

    解释八进制和linux命令od +理解0x00(Explain Octal and the linux command od + understanding 0x00) 我试图了解这个linux命令的 ...

  2. 图解“管道过滤器模式”应用实例:SOD框架的命令执行管道

    管道和过滤器 管道和过滤器是八种体系结构模式之一,这八种体系结构模式是:层.管道和过滤器.黑板.代理者.模型-视图-控制器(MVC) 表示-抽象-控制(PAC).微核.映像. 管道和过滤器适用于需要渐 ...

  3. CAD软件MV命令的理解

    CAD命令-MV介绍 MV命令创建一个不规则的视口来显示模型选项卡中的内容.不规则可使用多段线.矩形.圆形等绘制的路径关闭的对象. MV命令选项介绍.MV命令有很多,我就简单介绍下面几个命令: ON选 ...

  4. Spirng MVC +Velocity 表单绑定命令对象

    通常,表单中的数据在提交之后可以通过Spring MVC的@RequestParam注解在控制器函数的参数列表中中提取出来,但是一旦表单数据过多的话,参数列表将会变得非常长,最好的解决方案是将表单中的 ...

  5. [转载]浅析jQuery框架与构造对象

    浅析jQuery框架与构造对象 这是一些分析jQuery框架的文字 针对jQuery 1.3.2版本 面向的读者应具备以下要求 1.非常熟悉HTML 2.非常熟悉javascript语法知识 3.熟悉 ...

  6. Database之SQLSever:SQL命令实现理解索引、规则、默认概念及其相关案例之详细攻略

    Database之SQLSever:SQL命令实现理解索引.规则.默认概念及其相关案例之详细攻略 目录 SQL命令实现理解索引.规则.默认概念 索引 规则

  7. 使用命令对象代替switch语句的写法示例

    使用命令对象代替switch语句的写法示例 http://www.jb51.net/article/61530.htm 转载于:https://www.cnblogs.com/hghrpg/p/456 ...

  8. 面试精讲之面试考点及大厂真题 - 分布式专栏 05 公司使用什么RPC框架,聊聊你理解的RPC原理

    05 公司使用什么RPC框架,聊聊你理解的RPC原理 引言 前些年我们在做一个规模不大的系统的时候,也就是单体架构,一台服务器部署上一个应用和数据库也就够了.但是现代化互联网公司业务逐渐扩大,服务逐渐 ...

  9. vba mysql 没有为命令对象设置命令_怎样解决“没有为命令对象设置命令”的错误? - .Net论坛 - 51CTO技术论坛_中国领先的IT技术社区...

    复制内容到剪贴板 代码:Private Sub dataQuery_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) H ...

最新文章

  1. Linux aptget 参数,ubuntu下apt-get 命令参数大全
  2. python爬虫requests-Python爬虫(三)Requests库
  3. PADS LAYOUT的一般流程
  4. 什么是流量劫持,如何防止流量劫持?
  5. 标记寄存器---汇编学习笔记
  6. 考研【文法方向专场讲座】附:通信工程院校排名
  7. Every column needs a corresponding expression. No expression found for xxxx
  8. python set
  9. 基于Docker搭建Gitlab代码存储
  10. Python Error: “ImportError: No module named six”,用自动安装解决依赖问题
  11. ZOJ2833*(并查集)
  12. ORACLE中如何查找定位表最后DML操作的时间小结
  13. swift语法再温习
  14. 微信小程序 +第三方 直播-IM在线聊天
  15. android两个popwindow背景,Android PopWindow 设置背景亮度的实例
  16. 【微信小程序】自己的小程序跳转到京东小程序商品详情页
  17. 浅析ISO三体系标准认证对企业的作用
  18. python下载音乐代码_使用python3下载网易云音乐歌单歌曲,附源代码
  19. leetcode 73 矩阵归零
  20. 在谷歌和ie上加入mp4格式的视频

热门文章

  1. 我在 GitHub 上看到了一个丧心病狂的开源项目!治好了我的拖延症
  2. 碉堡的小程序:用 Python 制作演示迷宫算法的 gif 动画
  3. Redis数据库搭建集群(集群概念、redis集群、搭建集群(配置机器1、2、创建集群、数据操作验证)、Python与redis集群交互)
  4. 数字证书采用公钥体制进行加密和解密。每个用户有一个私钥,用它进行 (46)。。。
  5. 干货|深入浅出YOLOv5
  6. asp.net 页面中点击按钮后无反应的解决方法
  7. 用简单的C语言实现多任务轮流切换(模拟操作系统线程机制)【转】
  8. 学习SQLite之路(五) C/C++ SQLite开发实例
  9. 小P寻宝记——好基友一起走 背包
  10. ssh,FTP到远程服务器时,显示自定义的警告信息