質問

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

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

新しい従業員のデータ入力を使用して、従業員登録を例として、申請書の山を介して作業して、新しい従業員の詳細のキーに作業します。

  1. トップシートを取ります。
  2. 従業員名のキーとUIへのユニークな給与番号。
  3. 送信。
  4. 紙を「完成した杭」に入れます。
  5. 繰り返す。

たとえば、気を散らされていて、既にキーを入れていて、「メッセージ」がすべてに戻っていないかどうかを思い出せない場合、ユーザーが同じ給与番号を再びキーイングすることをどのように防止しますか。ユーザーが検索するためのクエリDB?

役に立ちましたか?

解決

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

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

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

  1. システムはコマンドを送信してから、成功した結果を待ちます。失敗の場合は、固定情報を求めて再試行してください。私が聞いたことすべてから、これは間違っているようであり、どちらの方法でも言うほど専門家に近いところではありません。

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

他のヒント

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

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

  1. トップシートがデータベースに撮影されているかどうかを確認します(特定の行が取られているかどうかを覚えておくためにテーブルRが必要です)。テーブルrに「取られる」列の旗を設定します
  2. 従業員名のキーとUIへのユニークな給与番号。
  3. 送信。
  4. 紙を「完成した杭」に入れます。
  5. 繰り返す。

ステップは原子的に実行する必要があります。

クライアントに既に入力されている従業員/給与番号のコンボのリストを追跡できますか?これがWebクライアントである場合、厚いクライアントの場合、メモリまたはその他の場合はCookieである可能性があります。彼らが初めてシステムに入ったら、リストをクリアして新たに開始します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top