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. 如果"一切是IO"“一切是file”是成立的,那么上述的想法也一定可以实现吧 awk对apache日志分析 ---

    定时执行 自动化处理 直接入库 再去读取这个file入库: root@VM---ubuntu:/var/log/apache2# awk '{print $1 "\t" $7}' ...

  2. Spring 框架整合JUnit单元测试

    // 整合之前 public class Demo{ @Test public void fun(){ // 获取工厂,加载配置文件 ApplicationContext ac = new Class ...

  3. java 统计文件注释个数

    参考:https://segmentfault.com/q/1010000012636380/a-1020000012640905 题目:统计文件中//和/* */注释的个数,双引号中的不算 impo ...

  4. 流畅的python 闭包

    闭包 人们有时会把闭包和匿名函数弄混.这是有历史原因的:在函数内部定义函数不常见,直到开始使用匿名函数才会这样做.而且,只有涉及嵌套函数时才有闭包问题.因此,很多人是同时知道这两个概念的.其实,闭包指 ...

  5. smtplib与email模块(实现邮件的发送)

    SMTP是发送邮件的协议,Python内置对SMTP的支持,可以发送纯文本邮件.HTML邮件以及带附件的邮件. Python对SMTP支持有smtplib和email两个模块,email负责构造邮件, ...

  6. http post url参数封装(key token 及校验码)

    post请求本来是一种很常见的web请求方式,相信许多项目都有一系列的封装工具类. 今天遇着一个特殊的需求. 需要在post的请求url内封装相应的token 与及key相关的值,这就奇怪了,url封 ...

  7. Github 的其他用法

    一.概述 Github 除了作为代码托管库外,有趣的程序员们还利用它解锁了有趣的新姿势. 二.新姿势 2.1 Github Pages 可以为项目建立静态主页(即gh-pages分支), 也可以建立命 ...

  8. LVS原理详解以及部署

    linux virtual server简称LVS,Internet的快速增长使多媒体网络服务器面对的访问数量快速增加,服务器需要具备提供大量并发访问服务的能力,因此对于大负载的服务器来讲, CPU. ...

  9. Sybase:delete与truncate、drop区别

    Sybase:delete与truncate.drop区别 区别: TRUNCATE TABLE TABLENAME:删除内容.释放空间但不删除定义. DELETE FROM TABLENAME:删除 ...

  10. jQuery时间轴鼠标悬停动画

    在线演示 本地下载