従来のMVCアプリケーションをコーディングする場合、サーバー側のフォーム検証をコーディングするためのベストプラクティスは何ですか?コードはコントローラーに属しますか、それともモデルレイヤーに属しますか?なぜ?
4 に答える
ウィキペディアから:
Model-view-controller(MVC)は、ソフトウェアエンジニアリングで使用されるアーキテクチャパターンです。パターンをうまく使用すると、ビジネスロジックがユーザーインターフェイスの考慮事項から分離され、アプリケーションの外観や基盤となるビジネスルールのいずれかを他に影響を与えることなく簡単に変更できるようになります。MVCでは、モデルはアプリケーションの情報(データ)とデータの操作に使用されるビジネスルールを表します。ビューは、テキスト、チェックボックス項目などのユーザーインターフェイスの要素に対応します。コントローラは、キーストロークやマウスの動きなどのユーザーアクションのモデルへの通信に関する詳細を管理します。
したがって、モデル-アプリケーションとビジネスルールを保持します。
私はジョシュに完全に同意します。ただし、コントローラーとモデルの間に一種の検証レイヤーを作成して、データがモデルに到達する前に、ほとんどの構文検証を実行できるようにすることができます。
例えば、
検証レイヤーは、日付形式、金額形式、必須フィールドなどを検証します。
そのため、モデルは純粋にビジネス検証に集中します。たとえば、xの金額はyの金額よりも大きくする必要があります。
基本的な構文チェックは、モデルのユーザー入力を変換するため、コントロールに含める必要があります。モデルは実際のデータ検証を行う必要があります。
これまでのMVCでの私の経験は、完全にレールで構成されています。
Railsは、モデルで100%検証を行います。
ほとんどの場合、これは非常にうまく機能します。必要なのは10回のうち9回だと思います。
ただし、フォームから送信する内容がモデルと適切に一致しない領域がいくつかあります。追加のフィルタリング/再配置などがある場合があります。
私が見つけたこれらの状況を解決する最良の方法は、基本的にモデルオブジェクトのように機能するが、フォームデータと1対1でマップするフェイクモデルオブジェクトを作成することです。これらのフェイクモデルオブジェクトは実際には何も保存せず、検証が添付されたデータのバケットにすぎません。
(レール内の)そのようなものの例はActiveFormです
データがそれらに入る(そして有効になる)と、通常、実際のモデルに直接転送するのは非常に簡単なステップです。