1

私はここでかなり迷っています。私は検証の使い方を知っており、現在、すべてのプロジェクトで FluentValidation を使用しています。しかし、新しいモデルを作成するたびに 1 つの疑問が生じます。ユーザー入力フィールドのみを検証する必要がありますか?それともすべてのフィールドを検証する必要がありますか?

[Validator(typeof(ChatClientValidator))]
public class ChatClient
{
    public int ID { get; set; }
    public string IP { get; set; } // Generated on server
    public int ChatSessionID { get; set; }
    public virtual ChatSession ChatSession { get; set; }
    public string Name { get; set; } // Client field
    public string Email { get; set; } // Client Field
}

public class ChatClientValidator : AbstractValidator<ChatClient>
{
    public ChatClientValidator()
    {
        RuleFor(x => x.Name).NotEmpty().WithMessage("Name is required");
        RuleFor(x => x.Email).NotEmpty().WithMessage("E-Mail is required").EmailAddress().WithMessage("Enter correct E-Mail address");
    }
}

IP、DateTime などのフィールドを検証する必要があります (サーバー側コントローラーで生成されるフィールドは?

4

3 に答える 3

0

すべてのフィールドを検証する必要があります。コーダーは間違いを犯すことが知られており、いくつかの検証または Assert ステートメントを追加することで、ソフトウェアが期待どおりに動作することを保証する別のレイヤーが追加されます。

于 2013-02-12T14:31:41.553 に答える
0

モデルがサーバーに戻された後、処理に必要なすべてのフィールドを検証するのが好きです。ここでのロジックは、各「ViewModel」クラスは複数のビューで使用でき、各ビューはモデルのさまざまな側面を表示し、フォームに表示される (および非表示になる) データを変更すると、ポストバックされる値が変更されます。ビューにないフィールドは、null または無効な値 (String.Empty または 0 または DateTime.MinValue など) をコントローラーにポストバックします。

処理に必要なフィールドを検証することで、他の開発者が必要なフィールドを追加するのを忘れないようにし、処理に使用されない「読み取り専用」フィールドは null として安全にポストバックできます。

例:私は、おそらく検証しないドロップダウンに関する情報を含むプロパティを追加することがよくList<SelectListItem>あります。また、サンプルで ChatSession を検証することもありません (他の値を設定するために使用されていると仮定すると、ChatSessionID に置き換えることができ、ChatSession は主に利便性のために存在します/画面)。ただし、ID の非表示フィールドを追加するのをよく忘れるので、[必須] としてマークして、ポストバックに常に存在するようにします。

于 2013-02-12T14:45:42.013 に答える