問題タブ [cqrs]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
cqrs - CQRS で同期コマンド ハンドラーと非同期コマンド ハンドラーを混在させる必要はありますか?
- ユーザーがサイトに登録し、ログインします。RegisterUserCommand が非同期コマンド ハンドラーに送信されます。
- ユーザーは自分のアドレスを変更したいのですが、RegisterUserCommand がまだ処理されていません。システムにユーザー レコードがありません。
これは同期コマンド ハンドラーの場合ですか? ユーザーを認証する前に、ユーザー レコードが作成されます。または、登録後に認証ユーザーに対する要件を再考する必要がありますか? アカウントが作成されるまで、ユーザーはサイトにアクセスできません。ユーザーがすぐにシステムにアクセスできない場合、使用率が低下する可能性があります。
CQRS システムで同期コマンド ハンドラーと非同期コマンド ハンドラーが混在しているのはよくあることですか?
nservicebus - NServiceBusタイムアウトを正しく処理する
NServiceBusは、タイムアウトメカニズムを提供します。nservicebus.comから:
基本クラスのRequestTimeoutメソッドは、NServiceBusにメッセージを別のエンドポイントに送信するように指示します。このメッセージは永続的に時間を保持します...この機能の基本的な実装を提供するTimeoutManagerと呼ばれるNServiceBusに付属するプロセスがあります。
時間切れになると、Timeout Managerはメッセージをサガに送り返し、そのTimeoutメソッドが最初に渡されたのと同じ状態オブジェクトで呼び出されるようにします。
私が見ているように、メッセージが受信者に配信されたにもかかわらず、タイムアウトがトリガーされる可能性があります(たとえば、応答がどこかでスタックしました)。
メッセージが受信者に届いたかどうかに関係なく、アプリケーションが正しく動作するようにアプリケーションを設計するにはどうすればよいですか。
google-app-engine - AppEngine上でのCQRS実装のエンドツーエンドの例
CQRSベースのアプリケーションを実装するために必要なすべてのインフラストラクチャコンポーネントは、AppEngine内ですぐに使用できるようです。
残念ながら、私はこの主題に関連するものを見つけることができません。
考えられる理由はほとんどありません
- それは「建築宇宙飛行士」を超えてよく守られた秘密です
- AppEngineは「設計により」スケールアウトするため、これは価値のない過剰なアーキテクチャです。
- まだ主流ではありません
ただし、完全なコードが利用できない場合でも、AppEngineに加えてCQRSに関するヒント、対象となるコードのビット、長所/短所があれば、私はあなたの知識から恩恵を受けることを非常に光栄に思います。
前もって感謝します。
注1:少なくとも、同様のプロジェクトが.Netエコシステム(Windows Azureを対象とするLokad-CQRS)に存在します
。注2:Pythonに傾倒している場合でも、Javaエクスペリエンスに関連する回答を歓迎します。
cqrs - CQRSコマンドとドメインの状態
私はCQRSを初めて使用し、コマンドが顧客オブジェクトにアドレス変更を書き込む方法について混乱しています。
顧客情報を2つのテーブルに分割したとしましょう
顧客-ドメインデータベース
アクティブプリファード
Customer_Readデータベース
名前、
住所、
電話、
Eメール
ユーザーが顧客の住所を変更します。アドレスフィールドはすべて読み取りデータベースにあります。住所情報を保持しているクエリ対応テーブルが3つ以上ある場合があります。
CQRS実装(サンプル)を理解している場合、カスタマードメイン(削除された集約ルート)は、各テーブルを更新するために複数のハンドラーによって処理される必要があるアドレス変更に関するイベントを公開する必要があります。
カスタマーオブジェクトの状態を変更しない場合、これを実装するにはどうすればよいですか?ドメインは、別のデータベースにアドレスがあることを知っている必要がありますか?
前もって感謝します。
よろしく、
3月
アップデート -
ネット上でさらに投稿を行った後、コマンドによって状態が変更されない場合、ドメイン自体を保存するイベントは生成されませんが、クエリ/モデルフレンドリテーブルのアドレスを変更するためにイベントが適用されると思います。
cqrs - CQRS での検証とバグ修正
CQRS の一般的な概念は理解できましたが、実世界の問題に対処するためのサンプル コードやスライド デッキを超えて移動することに関しては、いくつかの質問があります。
検証
データベースからの値のチェックを伴うコマンドの検証を行う必要がある場合、何をしますか? サービスに登録するには、固有のメール アドレスを入力する必要があります。私が聞いた議論の 1 つは、ユーザーが重複した電子メール アドレスを入力する可能性は非常に低いため、コマンドを処理するときにそれを処理し、「申し訳ありません」という電子メールを送信するか、パスワードのリセットを提案することです。したがって、このプロセスでは、検証のために readmodel を使用する必要がありません。しかし、コマンド ハンドラーで重複したケースをどのように処理するのでしょうか? それが重複していることをどのように知っていますか?readmodel をチェックしますか? 使いやすさを向上させるために、最初からそれを使用した方がよいでしょう。
機能の変更/バグ修正
コマンドの動作方法を変更したり、バグを修正したりする必要がある場合はどうなりますか? 追加のみの哲学では、すべての古いコマンドとコマンド ハンドラーをどうすればよいでしょうか? それらの名前を _legacy に変更して非表示にすることはできません。そうしないと、イベントの逆シリアル化が機能しません。これに対処するためのエレガントなソリューションは何ですか?
ありがとう
cqrs - CQRS とドメイン イベント
CQRS は私を思考モードにさせてくれました。私は CQRS のアイデアで新しいプロジェクトを始めようとしています。私が気に入っている主な点は、
1) クエリとコマンドの分離です。私たちのドメイン クエリは問題でした。
2) 監査用の Event Storage の使用 - 再生用には使用しません - 少なくとも今は。
クエリ側は得意ですが、ドメイン イベントについてはまだいくつか質問があります。
コマンドが複数の集約ルート (例: Order および OrderDetail) の更新をもたらす場合、それらを UnitofWork (トランザクション) の下でスコープします。現在、各ドメインは、その状態が変更されたときにイベントを発行する責任があります。
コマンドが 3 つの orderDetail レコードを変更するとします。各 OrderDetail は 2 つのイベントを公開します。最終的に 6 つのイベントがあります。
a) ドメイン オブジェクトに変更を加えた直後にイベントを発行する場合 (ただし、トランザクションをコミットしていない場合)、発行された (サブスクライバーによって消費された可能性がある) イベントを元に戻すにはどうすればよいですか?
- 私が考えることができるのは、公開されるイベントを「同じ作業単位のスコープの下で」リストに保持し、トランザクションのコミットが呼び出されたら、それを保存して公開することです。これは人がすることのように聞こえますか。
b) OrderDetail の変更により、Order Aggregate ルートでも何らかの変更が行われる必要がある場合、
i) OrderDetail Aggregate によって公開されたイベントを処理することによって、これらの変更を行う必要がありますか? たとえば。2 つの注文明細が削除されたとします。これにより、注文ステータスが「優先」から「非優先」になります。ii) イベントでエラーが発生し、注文状態が更新されない場合 - 注文が引き続き優先される場合、2 日以内に発送されます。
別の質問を追加
c) 「ドメイン イベントは、すべてのアプリケーション状態変更のソース」ですか、それとも「すべてのアプリケーション状態変更の結果」ですか?
前もって感謝します、
ザ マール
domain-driven-design - Domain Events と ServiceBus で CQRS と DDD を使用する場合の View での変更の表示
ドメイン イベントを使用して読み取りモデルを構築するシステムのフローについて、少し混乱しています。特に、ユーザーがコマンドを完了したときにデータ (およびそのビュー) が変更されることを期待しているにもかかわらず、システム アーキテクチャ (イベントを発行するための非ブロック呼び出し) により、実際のデータベースは変更前に変更されない可能性があるという事実にどのように対処すればよいでしょうか。ページがリロードされますか?
イベントとサービス バスを使用して、システムの 1 つの設計を CQRS とより一致させたいと考えています。
私のフローが次のようになるとしましょう:
ユーザーはビューのボタンをクリックして、アカウントから支払い方法を削除するタスクを実行します。
コントローラーは PaymentMethodRemovalService を呼び出し、accountId と paymentMethodId を渡します。
コントローラーは AccountRepository を使用してアカウントを取得し、account.RemovePaymentMethod(id) を呼び出します
アカウントは操作が実行できることを検証し、イベント PaymentMethodRemovedMessage(accountId, paymentMethodId) を発行します
イベント発行は非同期であるため、サービスから戻り、コントローラーからビューを返す必要がありますが、実際のデータはまだ更新されていません。
ハンドラー IHandle< PaymentMethodRemovedMessage > がイベントを受け取り、DB から実際の行を削除します。
それで、男は何をするのですか?
たとえば、支払い方法を表示していた div を削除するだけです。これは AJAX シナリオで機能する可能性がありますが、JavaScript 以外のクライアントをサポートするために Post-Redirect-Get を使用している場合はどうでしょう。次に、おそらく更新される前に、Get を起動し、Query 側からデータを読み取ります。
支払い方法を削除するリクエストが送信されたことを示す通知を表示するだけですか? (友好的ではないように見えますが、注文を送信するのには意味がありますが、住所の変更などには意味がありません)。
変更を分離された非同期イベントとして実装し、現在の変更を反映するユーザー データを表示する方法はありますか?
編集:私の質問はCQRS、DDD同期レポートデータベース に非常に似ています。そこに与えられた答えとここでほのめかされた答えには、少し臭いがあります-帯域外の更新を表示するためにUIを混乱させますいわば読み取りDBです。私はもう少しきれいなものを望んでいました。
asp.net-mvc - ASP.NET MVC の 3 層 - 他のユーザーは何をしているのですか?
新しい Web アプリケーションの作業を開始するとき、ASP.NET MVC、BLL (すべてのビジネス ロジックを含む一連のサービスで構成される)、および DAL (一連のリポジトリで構成される)の同じ実証済みのアーキテクチャに到達する傾向があります。 EF /*Linq to SQL*などの作業単位パターンを容易にします)。
コントローラはサービスとのみ対話し、サービスはリポジトリと他のサービスとのみ対話します。サービス層では、モデルが定義され、これらはコントローラーへの/からの入出力として使用されます。
私の質問は次のとおりです。他の人は何をしていますか? ASP.NET MVC Web アプリケーションのコンテキストで人々が何か違うことをしているかどうか知りたいです。たとえば、CQRSやDomain Eventsなどの概念があります。上記の方法で問題を解決するためにこれらを使用している人はいますか?
この質問は主に、私が知らないことを発見しようとする源です。漠然としすぎていないことを願っていますが、自分の方法を評価するために他の人が何をしているのかを見ることが重要だと思います.
architecture - CQRSとの多対多の関係の代替手段
CQRS / DDDとの古典的な多対多の関係をどのようにモデル化するのですか?
DDDとCQRSの両方の実装とソリューションはドメイン固有である傾向があることを私は知っているので、この質問に対する一般的な答えを思い付くのは難しいかもしれません。
ただし、 BookとAuthorの間に馴染みのある関係があると仮定しましょう。これは古典的な多対多の関係です。
私には、BookとAuthorがそれぞれ独自のAggregateRootに属する2つの異なるエンティティであることが最も自然に思えます。したがって、それらの間の多対多の関係を明示的にモデル化することは、進むべき道ではありません。
AddBookCommandをどのようにモデル化しますか?ライブラリに本を追加できるようにしたいのですが、特定の著者がこの本を書いたとどういうわけか述べています。このような関係をどのようにモデル化(および永続化)しますか?
BookもAuthorもValueObjectsの良い候補ではないようです...
domain-driven-design - イベント ソーシングと読み取りモデルの生成
スタック オーバーフロー ドメインの問題と、次のイベントの定義を想定します。
イベント ストアの状態を次のように仮定します (出現順)。
質問リスト (SO の最初のページ) の次の非正規化読み取りモデルを想定します。
そして、次のイベント ハンドラー (非正規化された読み取りモデルを構築します):
私の質問は、質問をしたユーザーの名前を見つけるにはどうすればよいですか? または、より一般的な: 非正規化された読み取りモデルが特定のイベントに存在しない追加データを必要とする場合、イベントをどのように処理すればよいですか?
Greg Young の SimpleSQRS やMark Nijhof のFohjinサンプルなど、 CQRSの既存のサンプルを調べました。しかし、それらはイベントに含まれるデータのみで動作しているように思えます。