2

ドメイン イベント パターンを調べて、この件に関する多くのリソースを読みましたが、要件を満たす適切な実装方法が見つかりません。基本的に、単純な CQRS 実装で読み取り/書き込み用のリポジトリ レイヤーをラップするサービス/ドメイン レイヤーがあります。このサービス/ドメイン層を使用する ASP.NET Mvc アプリケーションがあります。アプリケーション全体が Autofac と結び付けられており、私が実現したいのは次のことです。

サービス層で "CreateNews" を呼び出してニュース項目を作成する場合、次のようにイベントを発生させる必要があることを登録します。

public void CreateNews(Domain.Entities.News.NewsBO news)
{
  ValidateBusinessObject(news);

  var entityNews = AutoMapper.Mapper.Map<Repositories.Entities.News.News>(news);
  NewsCommandRepository.Create(entityNews);

  _domainEventManager.Register<NewsCreatedDomainEvent>(x => x.News = news);
}

これはすべてトランザクションで発生しており、保存が完了するまで実際にイベントを発生させたくないので、変更を保存するメソッドでこれを実行したいと考えています。

public void SaveChanges()
{
  _repoCommandManager.SaveChanges();

  _domainEventManager.RaiseEvents();
}

次に、ASP.NET Mvc アプリケーションで、次のような IHandler を実装したいと考えています。

public class NewsCreatedDomainEventCacheHandler : IHandles<Project.Services.Domain.Events.News.NewsCreatedDomainEvent>
{ 
    public void Handle(Services.Domain.Events.News.NewsCreatedDomainEvent @event)
    {
      // In here we would update the cache or something else particular to the web layer
    }
}

save メソッドからこのイベントを発生させ、Web.Mvc アプリケーションで実装を呼び出す方法がわかりません。

任意の提案をいただければ幸いです。

4

1 に答える 1

3

私はあなたのためにこれを行う方法の例を持っていると思います.MVCとAutoFacも使用しています! 私の特定の例では、コマンドとクエリの分離に集中していますが、その際にドメイン イベント パターンを実装する必要がありました。

最初にこのブログ投稿を読んで、物事がどのように組み合わされ、コードがどのように見えるかの概要を理解してください: http://www.nootn.com.au/2013/03/command-query-separation-to-better: .html

そのため、 DotNetAppStarterKit.Web.Mvc NuGet パッケージをインストールすることをお勧めします。その後、Global.asax ファイルを参照して、必要なすべてのコンポーネントを登録する方法を確認してください。Event Subscribersなどの SampleMvc アプリケーションを熟読できます。

これがお役に立てば幸いです。コマンドやクエリを使用せずに、DotNetAppStarterKit のイベント パブリッシャー/サブスクライバー部分を使用できます。

于 2013-03-25T11:33:57.990 に答える