【问题标题】:Designing a validation engine for form fields为表单字段设计验证引擎
【发布时间】:2011-12-09 14:58:40
【问题描述】:

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

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

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 类上,我将如何设置表单字段的值。

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

想法?

你会如何设计这个?

【问题讨论】:

  • “你会如何设计这个?” - 我会基于数据,而不是 GUI。并且可能使用 DataAnnotations 并早点回家。
  • 这只是我必须做的基础,所以我需要对其进行更多自定义,这可能会使数据注释脱离图片,但请阅读它,谢谢。
  • 通常,任何复杂的数据验证都是通过业务规则完成的。 Web 表单验证也不例外。

标签: c# rule-engine


【解决方案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

要将 DataAnnotations 与 Web 表单一起使用,请查看此贡献的实现:

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

【讨论】:

  • 有人贡献了 WebForms 的实现。在我的回复中添加链接。
  • 属性的问题是,如果规则发生变化(确实如此),您必须重新编译和重新部署项目。
【解决方案2】:

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

C# Lambda Expressions or Delegates as a Properties or Arguments

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-15
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多