0

文字列値を受け入れる空のリストがあります。

要素を追加するときに、同じ値の文字列がリストにすでに存在するかどうかを確認する必要があります。存在する場合は、例外が発生するはずです(ROLE 1は配列内の一意の値のみ)。

ここで、ユーザーがリスト内の要素を編集できるようにしたいのですが、新しい編集された値が一意である場合は、例外が発生するはずです。

私の問題は、ユーザーが編集要素を選択したが、サーバーに送信するときに実際には値を変更しないと想像してみましょう。システムは、要素が変更されていないことを検出し、値を受け入れる必要があります(リストにすでに存在している場合でも)。

PS私は問題を単純化します、私は実際にMVCとEF&linqを使用しています。私の問題は、挿入された値がアプリケーションのインターフェースで編集されているかどうかを確認できないことです。

この問題を解決するための効果的なアルゴリズムを見つけるのを手伝ってもらえますか?ありがとう

質問が十分に明確であるか、より多くの情報が必要かどうかを教えてください

4

1 に答える 1

1

これが私の解決策です:

  1. テキストが変更されたかどうかをクライアントに確認させます。そうでない場合は、サーバーに変更がなかったことを伝えます。これが不可能な場合は、クライアントに元のテキストと変更されたテキストの両方を送信してもらい、サーバーはそれが変更されたかどうかを確認できます。(そうでない場合は、保存しているデータに触れる必要はありません)。これは、デスクトップ環境と Web 環境の両方に適用されます。

  2. リストを使用せず、セット (ハッシュセットの場合もあります) を使用することをお勧めします。このセットでは、各アイテムを一度だけ持つことができます。できない場合は、引き続きリストを使用できると思います。私が正しく理解している場合は、データベースを使用しているため、リスト (またはセット) を同期する代わりにデータベース エンジンと直接やり取りできれば、アプリケーションのパフォーマンスが向上します。

  3. リスト/セットのエディションを (アイテムを設定する代わりに) 追加と削除のペアに変換します。変更を行う前に、リスト/セットに新しい値が含まれているかどうかを確認してください。新しい値がすでに存在する場合は、例外をスローするか、クライアントにメッセージを送信できます (または、環境により適切なものは何でも)。

  4. リスト/セットへのアクセスを同期したい場合があります。シンプルに保ちます: ロック (モニター) を使用します。読み取り/書き込みロックを検討しますが、学習中は複雑になります。[データベース エンジンと直接やり取りする場合は、代わりにそれを処理させることができます]。注:クライアントが1つしかない場合は、これは必要ありません...これまで(その1つのクライアントが複数の同時リクエストを送信できる場合を除きます... :P)。

于 2012-07-11T15:21:11.977 に答える