3

したがって、CQSの基本的な概念に慣れています。この概念では、1つのデータベースに書き込み、読み取り元のクエリデータベースを更新するコマンドがあります。

ただし、データを入力するシナリオを検討し、重複を防ぎたいと考えています。

新入社員のデータ入力を例として使用し、応募フォームの山を調べて新入社員の詳細を入力します。

  1. トップシートを取ります。
  2. UIに従業員名と一意の給与番号を入力します。
  3. 送信。
  4. 「完成した山」に紙を入れます。
  5. 繰り返す。

たとえば、ユーザーが気が散って、すでに1つを入力したかどうかを思い出せず、「メッセージ」が完全に戻っていない場合など、ユーザーが同じ給与番号を再度入力できないようにするにはどうすればよいでしょうか。ユーザーが検索するクエリデータベース?

4

4 に答える 4

1

データ入力は非協調的なドメインです。同じ共有データセットに対して複数のユーザーがアクションを実行する必要はありません。そのため、CQRSは特に関連性がありません。

于 2010-05-07T06:10:08.597 に答える
1

まず、ローカルキャッシュを簡単に使用して、直接のユーザーが同じ番号を再利用しないようにすることができます。それは簡単です。

しかし、実際には、これは、誤って2人が同じ重要なデータを同時に使用する可能性があるという事実を止めるものではありません。他の誰かが言ったように、これはCQRSの外です。これは、ほとんどすべてのアーキテクチャで発生する可能性があります。

現在、CQRSが変更できる主なことは、競合への対応方法です。私は2つの可能な解決策を見ます:

  1. システムはコマンドを送信してから、正常な結果を待ちます。失敗した場合は、修正された情報を要求して、再試行してください。私が聞いたすべてのことから、これは間違っているように見え、アンチパターンでさえあるかもしれませんが、私はどちらの方法でも言うのに十分な専門家ではありません。

  2. システムはコマンドを送信し、最終的にユーザーに競合について通知されます。彼らが問題を解決するために行くことができる場所がどこかにあります。あなたの場合、新しい番号を入力します(これも競合する可能性があります)。

于 2010-05-10T16:59:20.490 に答える
0

ワークフローをこれに変更することをお勧めします

  1. データベースでトップシートが取得されているかどうかを確認し(特定の行が取得されたかどうかを覚えておくためにテーブルRが必要です)、取得された場合はfalseを返し、取得されなかった場合はトップシートを取得します。そして、テーブルRで取得された行のフラグを「取得」するように設定します。
  2. UIに従業員名と一意の給与番号を入力します。
  3. 送信。
  4. 「完成した山」に紙を入れます。
  5. 繰り返す。

ステップはアトミックに実行する必要があります。

于 2010-05-05T16:47:28.663 に答える
0

クライアントですでに入力されている従業員/給与番号の組み合わせのリストを追跡できますか?これがWebクライアントの場合、Cookie、シッククライアントの場合、メモリなどの可能性があります。彼らが初めてシステムに入るとき、リストをクリアして、新たに始めてください。

于 2010-05-07T01:40:17.530 に答える