1

それぞれがエラー コードを返す一連の検証メソッドを実行するバリデータ クラスが必要です。エラーの重大度によっては、残りの検証を中止したい場合があります。各呼び出しの後に返されたエラー コードを確認し、残りの検証を実行しないこともできますが、これにより、メインの「駆動」ルーチンに多くの重複した混乱が追加されます。

そこで、これを処理する次のヘルパー ルーチンを作成しました...

public IList<Error> ValidateSet(InputType input,
    params Func<InputType, IList<Error>>[] validations)
{
    var errors = new List<Error>();

    foreach (var validation in validations)
    {
        errors.AddRange(validation(input));

        if (AbortValidations(errors))
            break;
    }

    return errors;
}

これは以下のように呼び出され、うまく機能します...

var errors = new List<Error>();

errors.AddRange(
    ValidateSet(input,
        ValidateX,
        ValidateY,
        ValidateZ)
);

私が今抱えている問題は、一部の検証で、InputType の 1 つのパラメーター以外に追加のパラメーターが必要になることです。

この同じ有用な構造を維持する方法はありますか? 以前の検証で「中止」エラー コードが返された場合、残りの検証を実行したくないため、各検証の結果を単純に渡すことはできないことに注意してください (検証はデータを読み込むため、これはパフォーマンス要件です)。

ありがとう、ジョン

4

2 に答える 2

0

これらの他の引数が何であるかに依存しますが、おそらく構造体です

struct
{
  public InputType  Input {get;set;}
  public int OtherArgument {get;set;}
}

したがって、1つの引数の入力は、引数のバケットになり、そのうちの1つが入力されます

于 2012-05-29T23:04:36.923 に答える
0

呼び出し時に追加のパラメーターがわかっている場合はValidateSet()、次のようなことができます

ValidateSet(
    input,
    input_type => ValidateX(input_type, additional_param1),
    input_type => ValidateY(input_type, something2),
    ValidateZ
);
于 2012-05-29T22:57:28.430 に答える