Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#自定义对象验证设计_C#_.net_Validation_Abstraction - Fatal编程技术网

C#自定义对象验证设计

C#自定义对象验证设计,c#,.net,validation,abstraction,C#,.net,Validation,Abstraction,我目前必须验证应用程序的自定义字段对象。简单地说,每个字段对象都包含有关字段验证的信息以及字段值。 我正在批量验证字段,所以目前,我有一个验证类,它有一个用于每个验证的方法。对于必填字段,它如下所示: private void RequiredFields() { foreach (Field field in allFields) { if ((field.Required == true)

我目前必须验证应用程序的自定义字段对象。简单地说,每个字段对象都包含有关字段验证的信息以及字段值。 我正在批量验证字段,所以目前,我有一个验证类,它有一个用于每个验证的方法。对于必填字段,它如下所示:

      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))
如果我这样做,它将允许我在不使用字段对象的情况下重用验证类,并且它还将允许更好的单元测试。。。然而,这似乎是不必要的抽象层,而且有些重复。。。请记住,这是所有验证中最简单的


建议?

为什么不让字段对象负责自己的验证

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; }
    }
}

我第二次这样做,但我会犹豫是否要做一个并不总是无效的领域。但是,我正在验证大约100个字段,所有字段都具有不同的验证,其中只有一些字段是特定于字段对象的。我希望将验证放在一起。如果您要验证100个字段,所有字段都需要不同的验证逻辑,并且其中只有一些是您自己的自定义类,那么我会说您有更深层次的设计缺陷。我建议每个字段都应该是“field”类型,但可能需要时扩展field类。现在,每个字段对象都公开相同的接口,您只需问每个字段对象“您有效吗?”验证逻辑如此不同的事实应该会促使您使用多态性。