ビジネスルールがMVCでの表示に影響する場合


8

MVC設計パターンは、ビジネスルールをプレゼンテーションから分離することにつながります。

ただし、ビジネスルールがプレゼンテーションに影響を与えることがあります。これに対処する最良の方法は何ですか?ViewModelを使用する必要があるのはそのときですか?

たとえば、存在しないライブラリアプリケーションに戻って、図書館員が返却された本をスキャンしています。システムは、本が遅れていることを示し、その常連客に罰金を課します。

特定の従業員は、特定の条件に基づいて罰金を無効にするセキュリティを持っている場合があります。

ライブラリアプリケーションのプレゼンテーションレイヤーでは、従業員が罰金を0に設定するか、ボタンをクリックして罰金を上書きする必要があります。

しかし、これを行うためのセキュリティがない従業員は、料金を無効な入力またはおそらく読み取り専用として見る必要があります。

セキュリティだけがビジネスルールではない場合があることに注意してください。これは単なる例です。たとえば、アプリケーションのどこかに設定情報が設定されていて、画面のフィールドが不要になるなどです。

このコードでは、誰でも罰金を変更してから検証メッセージを表示することができますが、それは良いユーザーエクスペリエンスではありません。

これを達成するための良い習慣は何ですか?(ASP.NET MVCを使用して)考えられるオプションは次のとおりです。

  1. ビュー自体にビジネスルールをチェックさせ、フィールドを無効または有効にします。

  2. ファインフィールドのプレゼンテーションを実装するHTMLHelper関数を使用し、そのヘルパー関数にビジネスルールをチェックさせます。

  3. コントローラーにビジネスルールを確認させ、別のビューを使用してもらいます。

  4. コントローラーにビジネスルールをチェックさせ、フィールドが有効かどうかを示すプロパティをViewBagに設定します。

  5. ViewModelを使用して、ビジネスルールをチェックし、フィールドが有効であることを示す情報を設定します。

オプション1と2では、プレゼンテーションレイヤーでビジネスルールの検証を行わなければならず、混乱を招きます。

オプション3では、2つのビューが定義されているため、作業が重複します。

オプション4および5では、プレゼンテーションレイヤーがフィールドが有効または無効になっていることを認識している必要がありますが、理由は認識できません。私は4または5が一番好きだと思います。

私が考えていない他のオプションはありますか?

回答:


3

私はあなたのオプション番号5が最良だと思いますが、若干の微調整を伴います:

あなたはViewModel、データが更新され、できるかどうかを示すプロパティを持つ必要があります。おそらく "CanOverrideLateFine"ブールプロパティ。

ViewModelを作成しているもの(コントローラー、またはコントローラーが委任している可能性が高いビジネスサービス)は、ビジネスルールを評価し、そのプロパティを設定する責任があります。ViewModel自体ではありません。

Viewその後、「CanOverride」プロパティを検査し、適切に利用者のためにレンダリングする方法を決定します。フォームフィールドを有効または無効にするのと同じくらい簡単かもしれませんが、まったく異なるものかもしれません(フィールドをレンダリングしたり、まったく異なる視覚要素を提供したりすることもないかもしれません)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.