CSLA业务规则

验证规则所在空间: Csla.Rules

基类 BusinessBase 的属性   BusinessRules 中记录了业务类的验证规则

验证规格的写法

private class MyRule : Csla.Rules.BusinessRule 

  protected override void Execute(RuleContext context) 
  { 
    var target = (Customer)context.Target; 
    if (target.Sales < 10) 
      context.AddInformationResult("Customer has
low sales"); 
  } 
}

添加验证规则

protected override void AddBusinessRules() 

  base.AddBusinessRules(); 
  BusinessRules.AddRule(new MyRule { PrimaryProperty = SalesProperty
}); 
}

多数规则都需要设置一个主要属性(PrimaryProperty),在构造函数中中为其赋值,比如下面的 Required,MaxLength 规则

 

    protected override void
AddBusinessRules()

    {

      base.AddBusinessRules();

      BusinessRules.AddRule(new
MyRule { PrimaryProperty = SalesProperty });

      BusinessRules.AddRule(new
Csla.Rules.CommonRules.Required(NameProperty));

      BusinessRules.AddRule(new
Csla.Rules.CommonRules.MaxLength(NameProperty, 20));

}

引发验证规则

 

BusinessRules.AddRule(new MyRule { PrimaryProperty =
SalesProperty });

 

 

在之前的AddRule() 调用中,PrimaryProperty 属性被设置为 SalesProperty

把验证规格 和 特定的属性关联在一起,一旦属性(SalesProperty)变动,验证规则就会被自动触发。

 

如果没有提供 为验证规则提供PrimaryProperty,业务规则是和业务类进行关联的。

 

 

基类 BusinessBase 的属性    BusinessRules 中有三个方法来检查验证规格

1 、CheckRules()
– 检查对象中的所有验证规则。

2、CheckObjectRules()  - 仅校验不和属性关联的验证规则。

3、CheckRules(property)
– 检查某个属性的所有规则。

 

框架中的实现

var rulesProperty

=
typeof(BusinessBase).GetProperty("BusinessRules",BindingFlags.DeclaredOnly
| BindingFlags.GetProperty | BindingFlags.Instance | BindingFlags.NonPublic);

 

               
if (rulesProperty != null)

               
{  

                   
var rules = rulesProperty.GetValue(this.Basic, null) as
Csla.Rules.BusinessRules;

                   
if (rules != null)

                   
{

                        rules.CheckRules();

                    }

               
}

               
else

               
{

                   
messageService.ShowError("rulesProperty == null");

               
}

 

 

 

 

 

 

 

提示实效规则列表

 

实效列表 BrokenRulesCollection

 

if (this.Basic.BrokenRulesCollection.Count > 0)

               
{  

                   
string temp = string.Empty;

 

                   
foreach (var item in this.Basic.BrokenRulesCollection)

                   
{

                        temp +=
item.Description + "\r\n";

                   
}

 

                    messageService.ShowError(temp);

 

                   
return result;

               
}

CSLA验证规则总结的更多相关文章

  1. Yii1.1的验证规则

    在Yii1.1的数据验证是由CValidator完成,在CValidator中提供了各种基本的验证规则 <?php public static $builtInValidators=array( ...

  2. ThinkPhp5.0模型验证规则

    Tp5提供了模型数据规则的验证功能,用于在数据save或者update前验证数据的有效性.Tp5提供校验规则的类为\Think\Validate,默认提供的校验规则可以查看该文件. 在Model文件中 ...

  3. EF里如何定制实体的验证规则和实现IObjectWithState接口进行验证以及多个实体的同时验证

    之前的Code First系列文章已经演示了如何使用Fluent API和Data Annotation的方式配置实体的属性,比如配置Destination类的Name属性长度不大于50等.本文介绍E ...

  4. TP5验证规则

    系统内置的验证规则如下: 格式验证类 require 验证某个字段必须,例如:'name'=>'require' number 或者 integer 验证某个字段的值是否为数字(采用filter ...

  5. [Asp.net MVC]Asp.net MVC5系列——在模型中添加验证规则

    目录 概述 在模型中添加验证规则 自定义验证规则 伙伴类的使用 总结 系列文章 [Asp.net MVC]Asp.net MVC5系列——第一个项目 [Asp.net MVC]Asp.net MVC5 ...

  6. Thinkphp 1.验证规则 2.静态定义 3.动态验证

    一.验证规则 数据验证可以对表单中的字段进行非法的验证操作.一般提供了两种验证方式: 静态定 义($_validate 属性)和动态验证(validate()方法). //验证规则 array( ar ...

  7. oracle ebs应用产品安全性-交叉验证规则

    转自: http://blog.itpub.net/298600/viewspace-625138/ 定义: Oracle键弹性域可以根据自定义键弹性域时所定义的规则,执行段值组合的自动交叉验证.使用 ...

  8. Struts2 验证框架 validation.xml 常用的验证规则

    validation.xml 的命名规则和放置路径: 文件名:<ActionClassName>-validation.xml <ActionClassName>就是要验证的A ...

  9. 爱上MVC3~为下拉列表框添加一个自定义验证规则

    回到目录 开发它的原因: 之前的同事,也是我的哥们,问我下拉列表框是否可以支持验证,这个问题看似简单,但确实MVC里有为我们提供,所以,只能自己写个扩展了,即自己写一个attribute特性,让它继承 ...

随机推荐

  1. Casperjs中fill提交表单遇到的问题

    1.if you access internet with proxy please add             --ignore-ssl-errors=true --ssl-protocol=a ...

  2. logging/re - 总结

    logging 模块 很多程序都有记录日志的需求 logging的日志可以分为 debug(), info(), warning(), error() and critical()5个级别 1.输出到 ...

  3. Linux基础命令(二)

    作业一:1) 新建用户natasha,uid为1000,gid为555,备注信息为“master” groupadd -g 555 netasha useradd -u 1000 -g netasha ...

  4. 在VMW里安装Ghost操作系统遇到的问题及解决的办法

    条件:Ghost系列系统镜像文件 遇到的问题:1.导入镜像文件时提示“无法检测此光盘映像中的操作系统”: 2.分区时提示“ezboot kernel not found” 解决办法:1.直接先创建一个 ...

  5. 002-docker安装-mac上安装docker,17.06在CentOS7 64位机器上安装

    一.mac上安装docker 1.下载 通过这个链接下载:https://download.docker.com/mac/stable/Docker.dmg 2.安装 将 Moby 的鲸鱼图标拖拽到  ...

  6. 通信—HTTP 协议入门(转载)

    HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等). HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于199 ...

  7. Hadoop十年解读与发展预测

    编者按:Hadoop于2006年1月28日诞生,至今已有10年,它改变了企业对数据的存储.处理和分析的过程,加速了大数据的发展,形成了自己的极其火爆的技术生态圈,并受到非常广泛的应用.在2016年Ha ...

  8. s5_day5作业

    # 1.写函数,用户传入修改的文件名,与要修改的内容,执行函数,完成批量修改操作 # def number_file(file,change_s,change): # import os # with ...

  9. (转)HttpWebRequest以UTF-8编码写入内容时发生“Bytes to be written to the stream exceed the Content-Length bytes size specified.”错误

    from:http://www.cnblogs.com/Gildor/archive/2010/12/13/1904060.html HttpWebRequest以UTF-8编码写入内容时发生“Byt ...

  10. ES集群重启

    操作步骤: 1. Disable shard allocation curl -XPUT 'localhost:9200/_cluster/settings?pretty' -d '{  " ...