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类。现在,每个字段对象都公开相同的接口,您只需问每个字段对象“您有效吗?”验证逻辑如此不同的事实应该会促使您使用多态性。