为表单域设计验证引擎

时间:2011-10-17 21:17:29

标签: c# rule-engine

我想创建一个表单验证引擎,我将进一步自定义,但作为基础,我需要一些关于如何构建基础的指导。

表单字段可以是您的标准表单字段,如:

textbox
drop down list
checkboxes
etc.

因此,此验证引擎将获得表单字段类型的列表,然后 每个表单字段的一组规则。

例如:

假设您有一个文本框,该规则将应用于文本框,并且必须确保该值为“蓝色”或“123”(因此它可以是字符串或整数值)。

我正在寻找关于如何安排课程的方向。

要使用哪种设计模式?

public class Rule
{
   public RuleType  RuleType {get;set;}
   public ComparisonType ComparisonType {get;set;}
}

public enum RuleType
{
    TextBox,
    DropDownList
}

public enum ComparisonType
{
    Equal,
    GreaterThan,
    GreaterThanOrEqual,
    LessThan,
    LessThanOrEqual
}

这看起来是一个好的开始吗?

在Rule类中,我将如何设置表单字段必须具有的值。

即。假设comparisonType是'Equal',我必须说等于“Blue”或123.我不能有字符串属性,因为我还要比较整数或布尔值。

想法?

你会如何设计?

3 个答案:

答案 0 :(得分:1)

基于属性的数据验证(DataAnnotations)是一个功能强大的模型,因为它很容易将验证应用于UI和业务对象层,并且具有高度可扩展性。

你没有陈述你的环境,但是如果你在这里使用MVC是一个很好的启动者:

http://www.asp.net/mvc/tutorials/validation-with-the-data-annotation-validators-cs

要了解有关创建自定义验证器的信息:

http://www.a2zdotnet.com/View.aspx?Id=182

要在Web表单中使用DataAnnotations,请查看此贡献的实现:

http://adventuresdotnet.blogspot.com/2009/08/aspnet-webforms-validation-with-data.html

答案 1 :(得分:0)

我会考虑使用lambdas /匿名方法,这可能会使您的验证更具可读性:

C# Lambda Expressions or Delegates as a Properties or Arguments

答案 2 :(得分:0)

尝试 Oval ,它是一个对象验证器,您可以将约束作为注释应用于类文件本身。基本上,您可以将表单设置为pojo类,并使用Oval验证/约束来注释字段。 1