1

ビジネス ルールを検証するためにこのコードを作成しましたが、これがビジネス オブジェクトを検証するための最適なソリューションであるかどうかを知りたいです。そうすれば、すべてのプロジェクトに対してこのような検証を行うことを学ぶことができます。このソリューションには、ソフトウェア設計のベスト プラクティスに関する重大な問題が多数含まれている可能性があります。

public interface IRule
{
    bool Isvalid();
}
public class CategoryRule : IRule
{
    CategoryRepository _category;
    string _id, _name, _parent;

    public CategoryRule(string id, string name, string parent)
    {
        _id = id;
        _name = name;
        _parent = parent;
    }
    public object IsValid()
    {
        bool result = this.ValidateId();
        if (result)
            result = this.ValidateName();
        else
        {
            this.Message = "the id value is not correct.";
            return false;
        }
        if (result)
            result = this.ValidateParent();
        else
        {
            this.Message = "the name value is not correct.";
            return false;
        }
        if (result)
            return _category;
        else
        {
            this.Message = "the parent value is not correct.";
            return false;
        }

    }
    private bool ValidateId()
    {
        long id;
        if (long.TryParse(_id, out id))
            return true;
        _category.Id = id;
        return false;
    }
    private bool ValidateName()
    {
        if (!string.IsNullOrWhiteSpace(_name))
            return true;
        _category.Name = _name;
        return false;
    }
    private bool ValidateParent()
    {
        long parent;
        if (long.TryParse(_parent, out parent))
            return true;
        _category.Parent = parent;
        return false;
    }
    public string Message
    {
        get;
        private set;
    }
}
public class CategoryPresenter
{
    View _view;
    CategoryRepository _model;

    public void AddCategory()
    {
        CategoryRule rule = new CategoryRule(_view.Id, _view.Name, _view.Parent);
        object obj = rule.IsValid();
        if (obj.GetType() == typeof(bool))
            _view.ShowError(rule.Message);
        _model.Add(obj as CategoryRepository);
    }
}

このコードの書き方についてアドバイスをいただければ幸いです。

4

1 に答える 1

2

IValidatableObjectインターフェースを見てみましょう。IRule同時にいくつかのエラーメッセージを返すことができることを除いて、インターフェースと同じことをしています。

データ注釈パッケージには、組み込みの検証ルールもあります。たとえば、MVC モデルを作成する場合、フィールドを[Required]属性でマークして、自動的に非 null である必要があるようにするだけで十分です。検証を手動で実行するには、Validatorヘルパー クラスを使用します。

于 2012-04-09T19:56:24.447 に答える