Model-View-Presenter パターンでは、ユーザー入力の検証をどこに記述する必要がありますか。
3 に答える
ドメイン固有のルール/検証はモデルに含まれている必要があります。ルールに違反していないかどうかを知らせるために、model.validate() を使用できます。この概念の適切な実装については、Rails モデル (ActiveRecord) クラスを参照してください。
ビューは、ユーザーが無効な入力を入力しにくくする必要があります。したがって、「数値の文字列を入力する」クラスの入力エラーは、プレゼンターに到達する前に削除する必要があります。モデルとビューの間で検証が重複する場合があります。たとえば、AttributeX は 1 ~ 100 の範囲でなければなりません。これはモデルで検証する必要があります。同時に、minValue と maxValue の範囲を 1 ~ 100 に設定して、UI にスピナーを挿入することもできます。
私は通常、ビューを完全にクリーンに保ち、ロジックはありません。しかし、私は多くの Web 開発を行っていません。Ajax っぽい状況では、クライアント側の検証をビューに表示する必要がある場合があります。
ビジネス ロジックの検証がモデルに組み込まれます。ビジネス ロジックの検証とは、最小注文サイズの確認などを意味します。
入力の検証はプレゼンターで行われます。これは、数値フィールドに数値以外の文字が含まれていないかどうかを確認するようなものです。ただし、状況によっては、ファイルが存在するかどうかなどを確認することも意味します。
さまざまな場所で検証を再利用できる必要がある、より複雑なケースでは、通常、さまざまな場所で呼び出すことができる検証エンジンに分離します。これにより、たとえば、プレゼンテーション層や永続化層で使用される検証コードの複製に関するいくつかの問題が解決されます。
プレゼンター....
ビューには、可能な限り無効な入力を防ぐ「ウィジェット」が必要です。