2010-12-15 10 views
11

私のチームは、マルチテナントを必要とするグリーンフィールドアプリケーションの導入を開始しています。私は、特に分散型クラウドベースのインフラストラクチャ上で、単純なスケーラビリティのパターンに関する大量の研究を行ってきました。そして、CQRSは流行語であるようです(「Crack for Architecture Addicts」 )。メリットと落とし穴を除いて、このアイデアをプロダクションアプリで広範囲(またはまったく)使用し、実際のガイダンスを提供できるGreg Young以外に誰かを見つけることはかなり難しいです。 1. CQRSアーキテクチャは、典型的なマルチテナントアプリケーションに対応しているか、大規模な企業内アプリケーションに適していますか? 2.このような状況で使用することをお勧めする場合は、アプローチについてのトレンチからのガイダンス、特に早期に取り組むべき事項、有機的に進化させるべき側面について説明してください。 3.誰かが試してみたことがあまりにも困難であるか、または利益を実現しなかった、またはそれに対して強い主張をしている(そして、CRUDおよびティアードデザインに固執することを推奨する)場合、それらの経験についても知りたい。マルチテナントCQRSアーキテクチャ

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

+0

(これはあなたの質問の具体的な内容には実際には言及していないので、これはコメントではありません)もし私がUdiのCQRSの記事を読んだことがあれば、http:// www.udidahan.com/2009/12/09/clarified-cqrs/そして彼のビデオをここで見てください:http://skillsmatter.com/podcast/open-source-dot-net/udi-dahan-command-query-責任分担/ rl-311 –

+2

.NET Azure CQRSの詳細はhttp://abdullin.com/とLokadプロジェクトhttp://code.google.com/p/lokad-cqrs/ –

+0

マイケル、ありがとうございますコメント。私は本当に読んで、これらのリソースを含むこのパターンに関する非常に大量の情報を見てきました。欠けているように見えるのは、これをしばらく使用した人からの声、または今すぐ実装している人の声です。 理論上の利点を取り入れる前に、実際の課題がそれほど大きくないことを検証したいと思います。私の好きな引用符の一つとして、「理論的には理論と実践は同じですが、実際にはほとんどありません」 – Mafuba

答えて

6

私は(我々はまだビジネスの資金調達を待っている)同じ出発は、実際のプロジェクトに着手する前に探索的な視点から、自分自身を指して検討しました。その中で、私の研究とそこから形成された意見は、アーキテクチャーのマルチテナント軸が、粗粒度サービスの内部設計のためのCQRSの使用とほぼ直交していることです。マルチテナント要件は、アプリケーションがセキュリティ、データ、プレゼンテーション/パーソナライゼーション、展開/プロビジョニング、およびスケーラビリティの観点からテナントをどのように分離するかについて、さらに重要な制約を課します。 CQRSはこれを本当に良くしたり悪くしたりすることはありません。私の意見では、サービスの貴重な建築上の問題に取り組むことには依然として価値があります。つまり、アプリケーションを提供するために疎結合しているすべてのサービスが、CQRSパターンに従う必要があるわけではありません。ただし、選択した疎結合アーキテクチャがその使用を禁止していない場合に限ります。

2

マルチテナントはCQRSを使用すると難しくないと思います。テナントIDをコマンドやイベントにヘッダデータとして埋め込み、IDに基づいてイベントストアを選択したり、マルチテナントとマルチインスタンスを組み合わせたりすることができます。あなたのドメインは非常に協力的であり、あなたの処分で、ドメインの専門家を持っている場合でも、そうでない場合は、コマンド/イベント-CUD ;-)

7
マルチテナントサイドを読んビットCQRSを変更します
  1. で終わる...自問してみてください。ビューをフィルタリングし、テナント関連のデータのみを返す必要があります。そして、あなたは他のアーキテクチャを使って同じ問題に直面します。
  2. あなたのアプリケーションをタスクベース(CRUDベースではない)にするため、CQRSをお勧めします。これはUIからコマンドを受け取ることを意味し、DTOよりも意味のあるものになります。 DDD原則でコアを書きたい場合は、貧血ドメインモデル(http://martinfowler.com/bliki/AnemicDomainModel.html)を避けてください。これを行うアプローチ - すべてのドメイン固有のロジックをドメインオブジェクトに移動する。コマンドハンドラは非常にシンプルでなければなりません(認証、ルート集約ルート、コマンドオブジェクトをメソッド呼び出しに変換、例外がスローされない場合は変更を適用します)。 グレッグのクラス記録(6時間半)を見てみる価値はあります:http://cqrsinfo.com/video/ マイケル・シミンズ氏はAzureをプラットフォームとして使用する予定があると述べたので、Lokad.CQRSプロジェクトを見る価値があります。私は私たちのプロジェクトの1つを実装するためにそれを使用しました。
  3. 本当にシンプルなCRUDアプリケーション(タスクベースではない)が必要な場合、CQRSは適合しません。 CQRSは、新入社員のための原則を理解するためにより多くの時間を必要とします。反対側では、ドメインコアプログラマーとあまり経験のないビュー - > dto - > uiプログラマーの間で開発タスクを分けることができます。
関連する問題