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; }
}
}
我第二次,但我会犹豫不决,使一个不需要无效的字段。 – 2009-08-17 20:40:03
嗯,我确实考虑过这个。但是,我验证了大约100个字段,全部使用不同的验证,只有其中一些字段对象是特定的。我想保持一致的验证。 – Jeff 2009-08-17 20:45:22
如果您正在验证100个字段,所有这些字段都需要不同的验证逻辑,并且只有其中一些是您自己的自定义类,那么我会说您有更深的设计缺陷。 – 2009-08-17 21:17:30