0

管理者モジュールとユーザー モジュールを使用して、データベースに基づく Web アプリケーションを構築しています。管理者モジュールを使用すると、管理者はデータベースに保存されているエンティティのプロパティを変更できます。ユーザー モジュールは、データベースの状態に基づいて動的に生成されたフォームを提供します。

次の使用例を検討してください。

  1. ユーザーは、提示されたフォーム オプションが特定の基準を満たす DB エンティティを表すフォームを含む Web ページを要求します。
  2. 動的に生成されたフォームを含む要求されたページが読み込まれます。
  3. 管理者は、フォームにロードされた一部のエンティティに対して DB で変更を加え、フォームに表示される基準を満たさないようにします (つまり、非アクティブ化、関連付け解除)。
  4. ユーザーは、フォームに表示される基準を満たさなくなったエンティティを少なくとも 1 つ選択してフォームを送信します。

このシナリオでは、送信されたフォームのサーバー側の検証に合格する必要がありますか?

ユーザーには有効なフォームが提供されましたが、投稿されたフォームのコンテンツは、ユーザーがページにいる間に管理者が変更されたため、DB の現在の状態に関して有効ではなくなりました...

合格する必要がある場合は、ページが読み込まれたときのデータベースの状態に対してデータを検証する必要がありますか (データベース履歴を活用するか、セッションを使用するか)、それともやり過ぎですか?代わりに、投稿されたエンティティが有効であることを検証できますが、そうではありません必ずしも現在のフォーム基準を満たす必要がありますか?

4

2 に答える 2

0

これは失われた更新の問題であるため、処理は「失われた更新」の問題の処理方法と同様である必要があります。2 人のユーザーが同時に編集する行を選択した場合、誰の変更が保持され、誰の変更が失われるのでしょうか? 最初の担当者の変更は保持され、2 番目の担当者には更新が失敗したことが通知されます。これが標準的なアプローチです。この場合、最初に更新するのは管理者ですが、最初に読むのはユーザーかもしれません。そのため、検証は失敗し、データが古く、現在のデータが表示されていることがユーザーに通知されます。

お役に立てれば。

于 2012-07-28T02:54:29.520 に答える
0

db プロパティを変更しない方がよいでしょう。db プロパティを変更すると、Web アプリケーションでエラーが発生します。フォームの値が取得され、データベースから表示される管理者用のフォームを作成してみてください。このようにして、データベースに含まれる値のみが管理者によって変更されます。この方法を使用すると、db プロパティはそのまま残ります。また、管理者に db への直接アクセスを許可しないようにしてください。

于 2012-07-06T05:31:29.497 に答える