33

Command Query Responsibility Segregation (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/

4

6 に答える 6

25

CodePlexの私のDDDsample.Netプロジェクトを見てください。GUI は ASP.NET MVC を使用して実装され、DDD を使用するビジネス ロジックは 4 つの異なるバリエーションで実装されます。

  • クラシック (CQRS なし)
  • 2 つの NHIbernate リレーショナル データ ストアを使用する CQRS
  • レポート側で LINQ to SQL を使用した CQRS
  • コマンド側でイベント ソーシングを使用する CQRS
于 2010-03-08T18:26:13.647 に答える
18

Cqrs を使用すると、Web プロジェクトがはるかに簡単になります。get サイトでは、すべてのクエリは "select * from table where 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 を使用すると、アプリケーションの Web 部分を作成するのが非常に退屈になりますが、ユーザーが決定を下すのに役立つコードを追加することで、より楽しくすることができます (オプションで ajax で使用される json を返す)。

于 2010-03-08T20:05:33.537 に答える
4

そして、ASP.NET MVC + NHibernate であるhttp://agrcqrs.codeplex.comでの私の試みを見てください。

于 2010-03-13T18:29:43.637 に答える
0

次の投稿では、興味深いリソースを見つけることができます: CQRS をプロジェクトに適応させる方法

私が特に興味深いと思ったのは、Microsoft のCQRS Journeyです。Windows Azure との依存関係が残念に思えるかもしれませんが、ちょっと待ってください... SQL Server にイベント ストアとエンタープライズ サービス バスが非常にうまく実装されています。デモ アプリのソース コードには、本番環境で SQL 実装を使用しないように警告するコメントがたくさんありますが、少し調整するだけでプロジェクトに適応させることができます。私はそれをやりました、そしてそれは非常にうまく機能します。

コードはきれいです (Microsoft の Patterns and practice の担当者によるものです)。依存性注入 (Unity を使用)、シンプルだが効果的な Enterprise Service Bus (SQL Server と ADO.NET、並列スレッドを使用)、Entity Framework を使用した読み取りモデルなどの使用方法の良い例を見つけることができます。そこから、CQRS とイベント ソーシングの方法を学びました... 覚えておいてください: すべてはイベントに関するものです

于 2015-01-06T13:10:27.243 に答える
0

CQRS lib Scritchy用に書いた完全な例を次に示します。

Scritchy nuget パッケージを使用して CQRS アプリを作成するのは非常に簡単で、数分で起動して実行できます。

于 2011-11-07T12:39:50.377 に答える