C#自定义对象验证设计

问题描述:

我目前必须为我的应用程序验证自定义字段对象。简而言之,每个Field对象都包含有关字段验证的信息以及字段的值。 我正在批量验证字段,所以目前我有一个验证类,每个验证都有一个方法。对于必填字段,它看起来是这样的:C#自定义对象验证设计

 private void RequiredFields() 
     { 
      foreach (Field field in allFields) 
      { 
       if ((field.Required == true) && (field.Value == string.Empty)) 
       { 
        field.isValid = false; 
       } 
      } 
     } 

现在我的问题是,我觉得我应该抽象层来验证,所以不是说:

if ((field.Required == true) && (field.Value == string.Empty)) 

...我想补充一个验证类,来接受这些值并把它变成这样:

if (!validater.RequiredFields(field.Required, field.Value)) 

如果我要做到这一点,那就让我重新使用验证类不使用领域对象,它会也允许更好的单元测试......但是,它看起来像是和不必要的抽象层,也有点重复......请记住,这是所有验证中最简单的。

对此提出建议?

为什么不让Field对象负责自己的验证?

class Field 
{ 
    public bool Required { get; } 
    public string Value { get; set; } 

    // assuming that this method is virtual here 
    // if different Fields have different validation logic 
    // they should probably be separate classes anyhow and 
    // simply implement a common interface of inherit from a common base class. 
    public override bool IsValid 
    { 
     get { return Required && Value != String.Empty; } 
    } 
} 
+0

我第二次,但我会犹豫不决,使一个不需要无效的字段。 – 2009-08-17 20:40:03

+0

嗯,我确实考虑过这个。但是,我验证了大约100个字段,全部使用不同的验证,只有其中一些字段对象是特定的。我想保持一致的验证。 – Jeff 2009-08-17 20:45:22

+0

如果您正在验证100个字段,所有这些字段都需要不同的验证逻辑,并且只有其中一些是您自己的自定义类,那么我会说您有更深的设计缺陷。 – 2009-08-17 21:17:30