我有一个客户模型对象,它需要基于用例的不同验证规则。例如,根据客户对象的使用情况,有一些属性是可选的,其他时候它们是必需的。我为此使用属性,但它不允许我指定规则集。我不使用具有这种能力的企业库。我可以为此切换到普通的 IDataErrorInfo 并传递像 RuleSet 这样的属性。有没有更好的方法来实现这一点而无需添加企业库?
问问题
122 次
1 回答
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;
}
}
}
于 2013-09-30T13:44:02.743 回答