MVC設計パターンは、ビジネスルールをプレゼンテーションから分離することにつながります。
ただし、ビジネスルールがプレゼンテーションに影響を与えることがあります。これに対処する最良の方法は何ですか?ViewModelを使用する必要があるのはそのときですか?
たとえば、存在しないライブラリアプリケーションに戻って、図書館員が返却された本をスキャンしています。システムは、本が遅れていることを示し、その常連客に罰金を課します。
特定の従業員は、特定の条件に基づいて罰金を無効にするセキュリティを持っている場合があります。
ライブラリアプリケーションのプレゼンテーションレイヤーでは、従業員が罰金を0に設定するか、ボタンをクリックして罰金を上書きする必要があります。
しかし、これを行うためのセキュリティがない従業員は、料金を無効な入力またはおそらく読み取り専用として見る必要があります。
セキュリティだけがビジネスルールではない場合があることに注意してください。これは単なる例です。たとえば、アプリケーションのどこかに設定情報が設定されていて、画面のフィールドが不要になるなどです。
このコードでは、誰でも罰金を変更してから検証メッセージを表示することができますが、それは良いユーザーエクスペリエンスではありません。
これを達成するための良い習慣は何ですか?(ASP.NET MVCを使用して)考えられるオプションは次のとおりです。
ビュー自体にビジネスルールをチェックさせ、フィールドを無効または有効にします。
ファインフィールドのプレゼンテーションを実装するHTMLHelper関数を使用し、そのヘルパー関数にビジネスルールをチェックさせます。
コントローラーにビジネスルールを確認させ、別のビューを使用してもらいます。
コントローラーにビジネスルールをチェックさせ、フィールドが有効かどうかを示すプロパティをViewBagに設定します。
ViewModelを使用して、ビジネスルールをチェックし、フィールドが有効であることを示す情報を設定します。
オプション1と2では、プレゼンテーションレイヤーでビジネスルールの検証を行わなければならず、混乱を招きます。
オプション3では、2つのビューが定義されているため、作業が重複します。
オプション4および5では、プレゼンテーションレイヤーがフィールドが有効または無効になっていることを認識している必要がありますが、理由は認識できません。私は4または5が一番好きだと思います。
私が考えていない他のオプションはありますか?