1

我有一个客户模型对象,它需要基于用例的不同验证规则。例如,根据客户对象的使用情况,有一些属性是可选的,其他时候它们是必需的。我为此使用属性,但它不允许我指定规则集。我不使用具有这种能力的企业库。我可以为此切换到普通的 IDataErrorInfo 并传递像 RuleSet 这样的属性。有没有更好的方法来实现这一点而无需添加企业库?

4

1 回答 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 回答