zoukankan      html  css  js  c++  java
  • 基于特性验证(完结)

        上一篇博客中,介绍了特性的验证的基本使用。上次演示的功能只是一个初级版,达不到在实际使用的要求。因为我们依旧有很多问题没有解决。这次我们就来一步步解决这些问题。

     

    待解决的问题

        至少需要解决两个问题,特性验证功能才能在实际的项目中应用。
        1、有多个Model时,如果处理Model间的关系。
        2、当我们有多个验证特性类时,如何处理验证特性类之间的关系。
     
     

    有多个Model时,如果处理Model间的关系?

        Model中现在只有一个方法是公有的,我们就用面向对象的思想,抽象出一个Model的父类,并将公用的代码提取到父类中。
        ps:代码很简单,就不在贴出来了。文章的末尾会提供Demo的下载地址。
     

     

    当我们有多个验证特性类时,如何处理验证特性类之间的关系?

        除了验证的逻辑不一样,特性类中的属性都是公有的。也应该为特性类抽象出一个父类。
        这样做的另一个原因是,我们属性上有多种特性验证时,可以将验证特性集合存入到父类中。调用时则调用子类具体的方法。
        解决完上述两个问题后,再来添加两个验证的特性:
            1、正则的验证。
            2、数据库是否存在数据的验证。

    正则的验证

     1 [AttributeUsage(AttributeTargets.Property)]
     2 public class RegexAttribute:ValidateAttibute
     3 {
     4     public string RegexStr { get; set; }
     5     public RegexAttribute(string regexStr,string errorMessage) : base(errorMessage)
     6     {
     7         this.ErrorType=ValidateCode.RegexFailed;
     8         this.RegexStr = regexStr;
     9     }
    10 
    11     public override bool Validate()
    12     {
    13         return Regex.IsMatch(this.InputValue.ToString(), this.RegexStr);
    14     }
    15 }

    可以看到,正则的验证只是多了一个RegexStr属性用来保存正则表达式。正则表达式由调用者提供,这样做的好处就是增加了灵活性。不用为每种不同验证情况添加一个类。
     
     

    数据库是否存在数据的验证

     1 [AttributeUsage(AttributeTargets.Property)]
     2 public class ExistAttribute:ValidateAttibute
     3 {
     4     private string _FiledName=null;
     5     private string Conn { get; set; }
     6     private string TableName { get; set; }
     7     public ExistAttribute(string conn,string tableName,string filedName,string errorMessage) : base(errorMessage)
     8     {
     9         this._FiledName = filedName;
    10     }
    11 
    12     public override bool Validate()
    13     {
    14         return new BLL.CommonBll().IsExixt(this.Conn,this.TableName,this._FiledName, this.InputValue.ToString());
    15     }
    16 }
     
          数据库验证,可以验证这条数据是否已经在数据库中存在,当然也可以验证其他的逻辑。
          查询的数据库,表名,字段也由调用者提供。这样保证了最大的灵活性。
     

    下载地址

    https://github.com/NemoChris/AttributeValidate/tree/v1.0

     
        
  • 相关阅读:
    temp etc/hosts
    chrome 32位安装好没法访问解决命令 64位也会有这样的问题
    函数与存储过程的区别
    VS创建新的本地数据库
    主从同步
    自定义函数Function
    特殊存储过程——触发器Trigger
    存储过程Procedure
    工具:sql server profiler(分析器)
    数据表访问
  • 原文地址:https://www.cnblogs.com/simple-blog/p/4921806.html
Copyright © 2011-2022 走看看