ASP.NET MVC でクエリ責任分離 (CQRS) をコマンドするにはどうすればよいですか?
-
18-09-2019 - |
質問
について読んできました コマンドクエリ責任分離 (CQRS). 。これが ASP.NET MVC でどのように機能するのか気になります。CQRS のアイデアは、概念的には素晴らしく聞こえますが、「通常/一般的な」アプローチと比較して、確かにいくつかの複雑さ (イベントとメッセージング パターン) を導入します。また、CQRS の考え方は、ある意味で ORM の使用に反対しています。今後のプロジェクトでこのパターンをどのように使用できるかを考えているので、CQRS を ASP.NET MVC および NHibernate と組み合わせた経験のある人がいたら、CQRS をより深く理解し、ASP.NET MVC で使用するのに役立つ具体的な例をいくつか挙げてください。ありがとう!
更新しました:Mark のサンプルコードを調べてみました。CQRS を学習している場合は必読です。
http://github.com/MarkNijhof/Fohjin
http://cre8ivethought.com/blog/2009/11/12/cqrs--la-greg-young/
http://cre8ivethought.com/blog/2009/11/28/cqrs-trying-to-make-it-re-usable/
解決
Cqrsは、Webプロジェクトがはるかに容易になります。 GETサイトでは、すべてのクエリは次のようになります "*選択テーブルからここID = @id")。これらの単純なクエリの場合、あなたはNHiberanteのようなORMを必要としません。あなたは、SQLデータベースを使用する必要はありません、あなたは、あなたがデータベーステーブルに、あなたのオブジェクトをシリアル化、または命名規則を使用することができますとき。あなたはまだNHibernateのが、読み出したデータベースを照会することができますが、すべてのクエリが同じになりますので、あなたが、そこから任意の利点を得ることはありません。
public class Controller
{
public ActionResult Get(Guid id)
{
var viewModel = reportingDatabase.Get(id);
return View(viewmodel);
}
}
コマンド側では、コントローラは、次のようになります。
public class Controller
{
public ActionResult Post(SomeForm form)
{
// do validation
var command = new SomeCommand(form.Property1, form.Property2);
bus.Send(command);
return redirecto(something else);
}
}
コントローラは、単にメッセージを送信し、メッセージがに行くとどのようなメッセージの結果がどこにあるか、それは知りません。このMVCの部分は、プログラムに非常に簡単です。 Cqrsは、アプリケーションのウェブ部分は非常に退屈な書き込みを行いますが、ユーザーが決定を(必要に応じて、AJAXによって使用されるJSONを返す)ために役立ついくつかのコードを追加することによって、それがより楽しく作ることができます。
他のヒント
私のを見てください DDDサンプル.ネット CodePlex 上のプロジェクト。GUI は ASP.NET MVC を使用して実装されますが、DDD を使用するビジネス ロジックは 4 つの異なるバリエーションで実行されます。
- クラシック (CQRS なし)
- 2 つの NHIbernate リレーショナル データ ストアを使用した CQRS
- レポート側での LINQ to SQL を使用した CQRS
- コマンド側でイベント ソーシングを使用した CQRS
そしてこれはASPで、 http://agrcqrs.codeplex.comするで私の試みを見てみましょう.NET MVC + NHibernateは
これが私が書いた完全な例です 私の CQRS ライブラリ Scritchy:
- 例.ドメイン:ドメインの実装
- 例.仕様 :MSpec を使用したドメインの動作仕様
- 例.Web :MVC Web アプリの例 (デモは次のとおりです) http://scritchyExample.apphb.com )
- 例.SignalR :html/Javascript/SignalR Web アプリの例 (同じドメイン コードを使用)
を使用して CQRS アプリを作成する Scritchy nuget パッケージ とても簡単で、 数分で起動して実行できるようになります
以下の記事では、あなたが面白いのリソースを見つけることができます:はどのように適応しますの
プロジェクトにCQRS私が特に興味深い見つかったものはhref="http://msdn.microsoft.com/en-us/library/jj554200.aspx" rel="nofollow noreferrer"> CQRSジャーニーの
のコードがクリーンである(これは、マイクロソフトのパターンとプラクティスからみんなからです)。あなたは、Entity Frameworkのともっとたくさんで読み取りモデル(並列スレッドとSQL ServerとADO.NET、と)(Unityと)依存性の注入、シンプルだが効果的なエンタープライズ・サービス・バスを使用する方法の良い例があります。私はCQRSとイベントソーシングを行うにはどのようにそれから学んだ...覚えている:そのすべてについてのイベントを