Csla框架之命令对象理解

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

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

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

   1:      /// <summary>
   2:      /// 分发抄送信息
   3:      /// </summary>
   4:      [Serializable]
   5:      public class ShareNode : Csla.CommandBase
   6:      {
   7:          //抄送的节点ID
   8:          private int _NodeID;
   9:   
  10:          //要抄送的用户列表
  11:          private List<string> _ShareUser;
  12:   
  13:          private ShareNode(int nodeID, List<string> shareUser)
  14:          {
  15:              this._NodeID = nodeID;
  16:              this._ShareUser = shareUser;
  17:          }
  18:   
  19:          public static void Execute(int nodeID, List<string> shareUser)
  20:          {
  21:              ShareNode com = new ShareNode(nodeID, shareUser);
  22:              com = DataPortal.Execute<ShareNode>(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) 都要标识为可序列化!这点我想在平常类的使用中也是要标识的...

转载于:https://www.cnblogs.com/quluqi/archive/2011/04/08/2008864.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CSLA.NET是一个在分布式环境下只通过修改配置文件就可以实现N层部署的框架. 它致力于构建丰富,强大而灵活的业务层,包含了验证,权限,数据门户等标准化的解决方案,使你的业务对象更加标准和灵活.它提出了移动对象(Mobile Object) 的概念,使业务对象在不同的服务器上物理性的移动.但它并不失灵活性,其数据门户对ADO.NET,LINQ, ADO.NET Entity Framework,Nhibernate等都能够支持.CSLA.NET还支持在业务对象上构建WPF、ASP.NET(Web Forms、AJAX和 MVC)和Windows Forms,WCF service,Windows Workflow,web Services,Silverlight等用户接口.      CSLA.NET开始于2001年,已经有8年时间了.现在已经被使 用在很多项目中.最新发布的3.6版本包括CSLA.NET  for Windows和CSLA.NET for Silverlight两个版本.其中CSLA.NET for Silverlight对Silverlight2.0提供了无缝支持.      CSLA.NET提供核心功能:         完全支持数据绑定(WPF,Silverlight,Windows Form和Web Form)      对象状态追踪(对象是否为新增、修改、标记为删除,等等。)    标准化业务和验证规则处理 在对象和属性层级的标准化授权 整合及简化,标准的.NET身份验证模型  撤销(Undo)功能,用来支持实作取消按钮,和复杂分层的用户接口(UI)     标准化集成与数据存取层或ORM 加强对于业务对象的LINQ查询支持 许多的一般生产力(productivity)功能,可用于很多的企业应用程序方案中 异步数据存取,和异步验证规则   支持的平台有:Microsoft .NET 1.x through 4.5.1Windows Runtime (WinRT for Windows 8.1)Windows Runtime (WinRT for Windows Phone 8.1)Windows Phone 8 (Silverlight)Silverlight 5Android (using the Xamarin tools)iOS (using the Xamarin tools)Linux and OSX (using mono) 标签:.net开发框架
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值