11

私のチームは、マルチテナンシーを必要とするグリーンフィールドアプリケーションの実装を開始しています。私は、特に分散クラウドベースのインフラストラクチャで、単純なスケーラビリティのパターンについて多くの研究を行ってきました。CQRSは流行語のようです(これまでのところ、「CrackforArchitectureAddicts」と呼ばれています。これは非常に面白いと思います。 )。利点と落とし穴はさておき、本番アプリでこのアイデアを広範に(またはまったく)使用し、実際のガイダンスを提供できるGregYoung以外の人を見つけるのは非常に困難です。

ここに私の質問があります。1。CQRSアーキテクチャは、一般的なマルチテナントアプリケーションに対応していますか、それとも大規模な内部エンタープライズアプリケーションに適していますか。2.このような状況での使用を推奨する場合は、アプローチ、特に早い段階で正しく理解するための事項、および有機的に進化させる必要のある側面について、トレンチからのガイダンスを提供できますか。3.誰かが試してみて、それが難しすぎるか、メリットを実現できなかった場合、またはそれに対して強い議論がある場合(そして、CRUDと階層型デザインに固執することをお勧めします)、それらの経験についても知りたいと思います。

参考までに、アプリケーションは.NETで記述され、フロントエンドは最初はWebベース(ASP.NET MVC)であり、モバイルクライアントやシッククライアントに拡張される可能性があります。同時実行性、トランザクションアクティビティ、およびデータ量はすべて、アプリケーションの存続期間を通じて比較的低いままであると予想されます(大量の金融アプリなどと比較して)。インフラストラクチャについては、Azureの使用を計画しています。

4

3 に答える 3

8
  1. マルチテナンシーは、CQRS 読み取り側を少し変更します。ビューをフィルタリングし、テナント関連のデータのみを返す必要があります。また、他のアーキテクチャを使用しても同じ問題に直面します。
  2. CQRS をお勧めするのは、アプリケーションを (CRUD ベースではなく) タスク ベースにするためです。これは、UI からコマンドを受け取ることになり、DTO よりも意味のあるものになることを意味します。DDD の原則を使用してコアを記述したい場合は、Anemic Domain Model ( http://martinfowler.com/bliki/AnemicDomainModel.html ) を避けてください。これを行うためのアプローチ - すべてのドメイン固有のロジックをドメイン オブジェクトに移動します。コマンド ハンドラーは非常にシンプルにする必要があります (認証、集約ルートの読み込み、コマンド オブジェクトのメソッド呼び出しへの変換、例外がスローされなかった場合 - 変更の適用)。Greg の授業記録 (6 時間半) を見る価値があります: http://cqrsinfo.com/video/ Michael Shimmins が言ったように、Azure をプラットフォームとして使用する予定がある場合は、Lokad.CQRS プロジェクトを検討する価値があります。これを使用して、プロジェクトの 1 つを実装しました。
  3. 単純な CRUD アプリケーション (タスクベースではない) が本当に必要な場合、CQRS は適合しません。CQRS は、初心者がその原則を理解するのにより多くの時間を必要とします。一方で、ドメイン コア プログラマーと経験の浅い view->dto->ui プログラマーの間で開発タスクを分離できるようになります。
于 2010-12-25T07:51:44.933 に答える
6

実際のプロジェクトに着手する前に、探索的な観点から同じ出発点を自分で検討しました(私たちはまだ事業資金を待っています)。その中で、そこから形成された私の研究と意見は、アーキテクチャのマルチテナント軸は、粗いサービスの内部設計のためのCQRSの使用とほぼ直交しているというものです。マルチテナント要件は、アプリケーションがセキュリティ、データ、プレゼンテーション/パーソナライズ、展開/プロビジョニング、およびスケーラビリティの観点からテナントを分離する方法に関して、追加の包括的な制約を課します。CQRSはこれを実際に良くも悪くもしませんし、私の意見では、サービスの貴重なアーキテクチャ上の課題に対処することにはまだ価値があります。とはいえ、アプリケーションを提供するために大まかに協力するすべてのサービスがCQRSパターンに従う必要があるわけではありません。

于 2011-03-09T14:17:02.540 に答える
2

マルチテナントは、CQRSを使用するのが難しい/簡単ではないと思います。メッセージングを使用する場合、さまざまな利点があります。コマンドとイベントにヘッダーデータとしてテナントIDを埋め込み、IDに基づいてイベントストアを選択し、マルチテナントとマルチインスタンスを組み合わせることができます。それでも、ドメインが高度に協調的であり、ドメインの専門家が自由に使えるかどうかを自問してください...そうでない場合は、command/event-cudになってしまいます;-)

于 2010-12-15T10:23:08.273 に答える