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. python scrapy,beautifulsoup,regex,sgmparser,request,connection

    In [2]: import requests   In [3]: s = requests.Session()   In [4]: s.headers 如果你是爬虫相关的业务?抓取的网站还各种各样, ...

  2. divison in python2 and python3

    python2 >>> / >>> /2.0 1.5 >>> / >>> /2.0 2.0 >>> >& ...

  3. python return中的or和and语句

    python return中的or和and语句 1.二元运算: 如果一个True,一个False或两个false: return True and False # 返回False return Tru ...

  4. SQL 将列转成字符串并用逗号分隔

    SELECT STUFF((SELECT ',' + FieldName FROM TableName FOR XML PATH('')),1,1,'') AS T 其中的逗号可以换成其它字符 转换完 ...

  5. MySQL(多表的表记录的查询)

    一.外键约束 1.创建外键 --- 每一个班主任会对应多个学生 , 而每个学生只能对应一个班主任 ----主表 CREATE TABLE ClassCharger( id TINYINT PRIMAR ...

  6. 海报工厂之(一)android 如何给图片添加水印和文字

    在Android中如何给图片添加水印,下面截取了部分核心代码,仅供参考: /**      * 获取图片缩小的图片      * @param src      * @return      */   ...

  7. 算法题 21 findNSum (好未来,LeetCode,牛客网)

    一.三数之和:LeetCode 15 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组. ...

  8. appium之Context切换

    原文地址http://blog.csdn.net/Mandypan/article/details/51396302 Context切换driver.getContextHandles();//获取页 ...

  9. 腾讯天猫经常出现这些低级的bug!

    对于程序员来说,bug很讨厌.每天重复着写代码.找bug.修改bug的动作.按理说互联网巨头的产品,bug应该比较少.但是实际上,无论是用百度.天猫.谷歌等产品,经常都会出现这些低级的bug,让人很火 ...

  10. Linux系统启动管理 系统启动流程

    概述 linux启动时我们会看到许多启动信息,其过程可以分为5个阶段: BIOS自检 读取MBR 通过Boot Loader引导系统加载 加载initramfe虚拟文件系统 加载内核 运行system ...