CQRSデザインパターンをいつ使用するのですか?
-
27-10-2019 - |
質問
私のチームと私は、CQRS(コマンドクエリ責任の分離)デザインパターンの使用について話し合ってきましたが、私たちはまだそれを使用する長所と短所を評価しようとしています。によると: http://martinfowler.com/bliki/cqrs.html
私たちは、フィールドでCQRの十分な用途をまだ見ていません。
それで、皆さんは何を考えていますか、問題はいつCQRを使用することを要求するのでしょうか?
解決
CQRSは、アプリケーション全体を含むパターンではありません。
これは、ドメイン駆動型のデザイン(DDD)に基づいている概念です。そして、DDDの重要な戦略的概念はいわゆるものです 境界のあるコンテキスト.
典型的なアプリケーションには、複数の境界付きコンテキストがあり、そのいずれかが理にかなっている方法で実装できます。例えば
- ユーザー管理 - > Crud
- 請求書 - > crud
- 保険契約管理(コアドメイン) - > CQRS
- ...
これはおそらくあなたの質問には答えませんが、トピックについてもう少し洞察を与えるかもしれません。正直に言うと、プロジェクトの詳細を考慮せずにそれをまったく答えられるとは思いません。それでも、明確なようなものはめったにありません ベストプラクティス.
他のヒント
CQRL批評家は、CQRSは複雑であり、それが真実かもしれないと言うかもしれません。
もちろん、CQRSスタイルのシンプルなCRUDアプリケーションの開発をオーバーヘッドに追加しているため、次の場合にのみCQRSを使用することを検討してください。
- 大規模なチーム -CQRSアーキテクチャを選択した場合、開発タスクを人間に簡単に分割できます。あなたのトップの人々は、ドメインロジックに取り組むことができ、熟練した開発者に通常のものを残します。
- 難しいビジネスロジック -CQRSは、ドメインのロジックとインフラストラクチャ操作の混合を避けることを強制します。
- スケーラビリティが重要です -CQRSを使用すると、優れた読み取りパフォーマンスを実現できます。コマンド処理は複数のノードでスケーリングでき、クエリは読み取り専用操作であるため、高速読み取り操作を行うために最適化できます。
複雑なビジネスドメインまたはハードビジネスドメインがある場合:
- イベントソーシングで;ロジックをテストする良い方法が必要です
- イベントソーシングで;あなたはテストと推論を通してあなたの行動を証明したい
- ドメインサービスの複数のクライアントまたは消費者がいます(単一のWebサーバーだけでなく)
または、一般的なデータに基づいて行動する必要があるユーザーがいます。
- そして、あなたはあなたのドメインのデータマージの概念を正式にしたい
- または、イベントのマージにロジックを適用する必要があります
または、スケーラビリティ要件があります。
- パターンをボトルネックを削除する非正規化パターンとして適用します
- 垂直ではなく水平方向にスケーリングしたいと考えています
または、パフォーマンスの問題があります(スケーラビリティの反対側):
- たとえば、イベント主導のアーキテクチャにアーキテクチャを移行する必要があります - パターンとしてのCQRSは良い足がかりです。
または、身体的に分離されているチームがあります。
- たとえば、チームの一部は別の国にあります
- または、対面のコミュニケーションを取得するのは難しいので、Read Models of Things(Sagas、Domain、Crud)から切り離すことをお勧めします。
それはCQRSではなく、過度に複雑であり、コンピューターです。
CQRSデザインパターンをいつ使用するのですか?
CQRSアーキテクチャパターンは、ユーザーが表示する必要があるすべてのデータをリポジトリから照会することが困難な場合に使用できます。これは、UX Designがいくつかの総合的なタイプとインスタンスを削減するデータのビューを作成する場合に特に当てはまります。ドメインが洗練されているほど、これは真実になる傾向があります。
UX設計で妥協するのに適していない場合、CQRSを使用して、次のような他のソリューションに関連する問題を軽減しようとします。
- クライアントに複数のリポジトリを使用して、すべての集計インスタンスを取得する必要があります。また
- 単一のクエリを使用してばらばらのデータを収集するためのさまざまなリポジトリ上の専門的なファインダーの設計。
要約するには、リポジトリから照会するのが難しい場合は、ユーザーが表示する必要がある場合、CQRSを使用します。
私の観点から、それは2つの大きな利点を追加します。
- 極端なスケーリング機能
- 区別されたチームに関しては非常に便利です。
以下は、CQRを使用する理由です。
- スケーラビリティ(読み取りは書き込みを超えているため、それぞれのスケーリング要件は異なり、より良く対処できます)
- 柔軟性(個別の読み取り /書き込みモデル)
- 複雑さの減少(複雑さを別々の懸念に変える)
- ドメイン /ビジネスに集中します
- 直感的なタスクベースのUIの設計を容易にします
Real Worldシナリオでは、複数のドメインから多くのデータを必要とするフロントエンド/Webサービスクライアントがあり、データベースからこれらのデータを取得する必要があるフロントエンド/Webサービスクライアントがいる場合、CQRSが役立つ場合があります。
そのような場合、開発がより速く、実行時間が速くなる可能性がある個別の読み取りモデルの作成を検討する場合があります。