我有一个Customer Model对象,需要根据用例使用不同的验证规则。 例如,根据Customer对象的用法,有些属性是可选的,只要它们是必需的。 我使用属性,但它不允许我指定规则集。我不使用具有此功能的企业库。 我可以为此切换到普通的IDataErrorInfo并传递类似RuleSet的属性。如果没有添加企业库,有没有更好的方法来实现这一目标?
答案 0 :(得分:0)
继承是您正在寻找的解决方案。而不是在属性和规则集中隐藏大量逻辑,而不是使用子类。
以下示例显示BaseCustomer
允许除了错误名称之外的任何内容。 CustomerWithBadName
需要一个坏名字。
class BaseCustomer : IDataErrorInfo
{
private string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
public virtual string Error
{
get { return null; }
}
public virtual string this[string columnName]
{
get
{
string result = null;
if (columnName == "Name")
{
if (Name == "Bad name!")
{
result = "Name must not be bad!";
}
}
return result;
}
}
}
class CustomerWithBadName : BaseCustomer
{
public override string Error
{
get { return null; }
}
public override string this[string columnName]
{
get
{
string result = null;
if (columnName == "Name")
{
if (Name != "Bad name!")
{
result = "Name must be bad!!!";
}
}
return result;
}
}
}