1

ユースケースに基づいて異なる検証ルールを必要とする Customer Model オブジェクトがあります。たとえば、Customer オブジェクトの使用法に応じてオプションであるプロパティがいくつかありますが、それ以外の場合は必須です。これには属性を使用しますが、ルールセットを指定することはできません。この機能を持つエンタープライズ ライブラリは使用しません。これを単純な 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 に答える