問題タブ [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 - ビューモデルを準備するときに2つの集約ルートを「結合」する方法は?
とが私のモデルの集合ルートであるBook
と仮定します。Author
AuthorsAndBooks
読み取りモデルでは、著者と書籍のリストであるテーブルがあります。Book.AuthorId
イベントが発生したときに、新しい行を作成するためのデータBookAdded
を受信したいと思います。Author
AuthorsAndBooks
は集約ルートであるためBook
、に関する情報はイベントAuthor
に含まれません。また、 rootにはゲッターがないため(CQRSとイベントソーシングに関するすべての例と投稿のガイドラインによる)、これをBookAdded
含めることはできません。Author
通常、私はこの質問に対して2種類の回答を受け取ります。
- イベントハンドラーで必要なすべてのデータでドメインイベントを強化します。しかし、私が言ったように、私はAggregatesRootsに対してそれを行うことはできません。
- ビューモデルから利用可能なデータを使用します。
Author
つまり、ビューモデルからロードし、それを使用してAuthorsAndBooks
行を作成します。
最後のものには、並行性に関するいくつかの問題があります。BookAdded
イベントの処理中は、作成者データをビューモデルで使用できません。
これを解決するためにどのようなアプローチを使用しますか?ありがとうございました。
cqrs - CQRSアーキテクチャで読み取りモデルテーブルに名前を付けるためのベストプラクティス?
私はCQRSのアイデアに不慣れであり、いつものように、物事に名前を付ける方法を決定することは、学習プロセスの最も難しい部分の1つです。
CQRSアプリケーションの読み取りデータベースでビューごとに1つのテーブルの規則に従っている場合、さまざまなビューのテーブルに名前を付けるにはどうすればよいですか?
読み取りモデルを消費するさまざまなクライアントがあるとしましょう。データを消費しているクライアントとUIビューに基づいてテーブルに名前を付ける必要がありますか?
ここで、UIを読み取りモデルデータベースおよびクエリの実行に使用されるWebサービスと結合していることに懸念はありませんか?それとも、クエリWebサービスとクライアントでこの作業を実行するのではなく、データを集約するすべての複雑さを読み取りモデルにプッシュするという、これがCQRSアーキテクチャのまさに目的ですか?
非正規化された読み取りモデルで使用するテーブル名の例を誰かに教えてもらえますか?
c# - CQRS クエリ Web サービスに最適なデータ アクセス テクノロジはどれですか?
読み取りデータベースにクエリを実行し、DTO を設定するために、人々はどのツールを使用していますか?
現在、Sql2008 データベースに読み取りモデルがあり、WCF サービスを介してすべてのクエリを実行しています。Fluent NHibernate を使用して、自動マッピングを使用してデータ コントラクトを設定していますが、これはやり過ぎでしょうか?
私たちの要件は本当にこれです...
- Web サービスに SQL コードがありません
- Web サービスにマッピング コードはありません。理想的には、規則に従ってマッピングする必要があります。読み取りデータベース フィールドは、データ コントラクト プロパティと同じ名前を持ちます。手動でマッピング コードを記述して保守することは望ましくありません。
- Web サーバーのリソース使用量を最小限に抑えます。
cqrs - CQRS内でのレポート
私はCQRSを理解して、レポート環境で役立つかどうかを確認しようとしています。
問題:CQRSで設計されたシステムはすでに本番環境にあり、コマンド、イベントを正常に生成し、必要なクエリビューを更新しています。新しいレポートが必要です。このレポートはいくつかのパラメータを取ります。開始日、終了日、製品タイプ、および製品カテゴリ。
次の集計ビューを生成するにはどうすればよいですか。
- 最初は空になるクエリストア
- そして、非常に異なる値のパラメータを渡すことができます
CQRSアプローチを使用してこれを解決しようとしますか、それともより良い代替手段がありますか?
ありがとう
cqrs - cqrs クエリのパフォーマンス
クエリ ストアで複数のテーブルを使用することをいつ検討すべきかを知りたいです。
たとえば、製品の説明が変更された問題を考えてみましょう。この変更は、製品の説明を含む多数の集計がある場合、読み取り専用クエリ ストアの同期に大きな影響を与える可能性があります。
時間のかかる同期の問題を回避するために、どの時点でデータのわずかな正規化を検討する必要がありますか? これはノーノーまたは容認できる妥協ですか?
ありがとう、
c# - Prism Event Aggregator またはコマンドを傍受するためのその他のパターンでメッセージをキャンセルしますか?
Prism イベント アグリゲーターでのメッセージのブロードキャストをキャンセルする方法を知っている人はいますか?
かなり標準的なコマンド/イベント メッセージングを実行しようとしています。シーケンス図で説明します。
ここで、検証を追加したいと思います。検証がコマンドをインターセプトし、適用する有効なコマンドであるかどうかを判断し、そうでない場合はそのブロードキャストをキャンセルする必要があることは理にかなっています。本質的に、これは私が欲しいものです:
の行に沿って何かを行う方法を知っている人はいますか
または、使用する別のより良いパターンはありますか?
validation - CQRS での検証は、UI で 1 回、ビジネス ドメインで 1 回、別々に行う必要がありますか?
私は最近、CQRS à la Greg Youngの記事を読みましたが、まだ CQRS について理解を深めようとしています。
入力の検証をどこで行うべきか、また、2 つの別々の場所で行わなければならない可能性があるかどうかについてはわかりません (そのため、Don't Repeat Yourself ルールに違反し、懸念の分離にも違反している可能性があります)。
次のアプリケーション アーキテクチャがあるとします。
ドメインは、コマンド バスの背後にある UI から隠されています。つまり、UI はコマンドをドメインに送信できるだけで、ドメイン オブジェクトに直接到達することはありません。
集約ルートがイベントに反応しているときに検証を行うのではなく、それ以前に検証を行う必要があります。
コマンドはドメイン内で (集約ルートによって) イベントに変換されます。これは、検証が行われる可能性のある場所の 1 つです。コマンドを実行できない場合、コマンドは対応するイベントに変換されません。代わりに、(たとえば) 例外がスローされ、コマンド バスを経由して UI に戻り、キャッチされます。
問題:
コマンドを実行できない場合は、UI で対応するボタンまたはメニュー項目を無効にしたいと考えています。しかし、途中でコマンドを送信する前に、コマンドが実行できるかどうかをどのように知ることができますか? クエリ側にはビジネス ロジックがまったく含まれていないため、ここでは役に立ちません。コマンド側でできることは、コマンドを送信することだけです。
可能な解決策:
任意のコマンドDoXに対して、対応するダミー コマンドCanDoXを導入します。これは実際には何も実行しませんが、コマンドXがエラーなしで実行できるかどうかをドメインにフィードバックさせます。
UI で (実際にはドメインに属している) いくつかの検証ロジックを複製します。
明らかに、2 番目の解決策は好ましくありません (関心の分離が不足しているため)。しかし、最初のものは本当に良いですか?
cqrs - 時間とともに変化するグラフを再作成する
私のドメインには、市の電気ネットワークを表すエンティティがあります。実際、私のモデルは、ブレーカー、変圧器、ラインを含むリストを持つエンティティです。
ブレーカーの開閉ごとにネットワークが変わり、ユーザーが接続を変更できるなど...
CQRS のすべての例で、EventStore は Version と aggregateId でクエリされます。
「ネットワーク」集約またはすべての「接続可能」アイテムに対してのみイベントを実装する必要があると思いますか?
この場合、(日付に基づいて) 「実際の」ステータスを取得するためにすべてのイベントを再生する必要がある場合、10000 から 20000 近くのイベントを処理することができます。
イベントは 1 つのプロパティを変更しますか、それともオブジェクト (オブジェクトのすべてのプロパティを含む) を変更するイベントが必要ですか?
.net - CQRS を使用する ASP.NET MVC アプリの適切な読み取りモデルは何ですか?
ASP.NET MVC アプリの開発を検討しています。これは、将来的に Azure で実行できるようにする必要があります。アプリは、私がかなり慣れていない CQRS デザイン パターンを使用します。書き込みモデルは、NHibernate とマッピングを使用します。読み取りモデルに使用するデータベースの種類がわかりません。読み取りモデルには、次のプロパティが必要です。
SQL ベースである必要はありませんが、可能です。そこでも NHibernate を使用して、単純なビュー モデル -> テーブル タイプのマッピングを外部キーなしで作成できます。SQL CE または SQLite イン メモリ データベースをデータ プロバイダーとして使用できます。これにより、データのクエリに関しても、柔軟性が少し向上します。
ビューモデルオブジェクトをそのまま保存するオブジェクトのシリアル化/デシリアライザーである可能性があります。これは使いやすく、将来的には Azure Blob Storage などを利用できるようになるはずです。これを適切に処理する優れたフレームワークはありますか?
以前にこの種のアプリケーションを作成したことのある人からのフィードバックをお待ちしています。
cqrs - J Oliver EventStore V2.0 に関する質問
CQRS を使用したプロジェクトの実装に着手しており、J Oliver EventStore V2.0 をイベントの永続化エンジンとして使用する予定です。
1) ドキュメントでは、ExampleUsage.cs は "BuildSerializer" で 3 つのシリアライザーを使用しています。これは、逆シリアル化プロセスの柔軟性を示すためのものだと思いますか?
2) 一部のイベントがディスパッチされなかった「失敗後の再起動」の場合、GetUndispatchedCommits() を呼び出してディスパッチするスタートアップ コードが必要だと思いますが、正しいですか?
3) 繰り返しますが、「ExampleUseage.cs」では、「TakeSnapshot」が 3 番目のイベントをイベントストアに追加し、次に「LoadFromSnapShotForward」が最新のスナップショットを取得するだけでなく、ポスト スナップショットのイベントを取得して再構築をシミュレートすると便利です。集合体。
4) 古いスナップショットを保持する用途が見当たりません。それらが役立つユースケースを教えてください。
5) コマンドの受信とイベントの生成を処理するサービスがある場合、特定の集計の最後のスナップショット以降のイベント数を追跡するための推奨戦略は何ですか。「GetStreamsToSnapshot」をあまり頻繁に呼び出したくないのは確かです。
6) SqlPersistence.SqlDialects 名前空間では、SQL ステートメント名は「GetStreamsRequiringSnapShots」ではなく「GetStreamsRequiringSnaphots」です。