CQRS+ES .NET Frameworks and Libraries

I realize this question is more CQRS+ES than it is specific to EventStore. But we’ve made the decision to use EventStore as our storage and we are about to undertake our first CQRS+ES project, so I was hoping for a little direction from the community.

We are looking for a .NET library/framework to jump-start our development using these new techniques. We would like to find a library that:

  • easily (or natively) supports EventStore
  • has command handlers / event handlers wired up
  • supports snapshots
  • is opinionated

We have looked at several options but nothing jumps out as the obvious choice. I keep thinking that I’m missing something because this is something that I would expect every .NET development team starting with CQRS+ES+EventStore to look into. We have looked at the following libraries/projects. Any feedback, opinions or experiences, are very welcome and desired.

  • Edument
    • CQRS Starter Kit - http://www.cqrs.nu/ -
      seems like a well thought-out starting point, but lacks a community (google
      group has about 1 new topic per year).
  • SimpleCQRS
    – by tyronegroves - https://github.com/tyronegroves/SimpleCQRS
    • Seems like a decent start but is lacking some “architectural robustness”. Hasn’t been updated since 2011.
  • SimpleCQRS
    – by Greg Young – https://github.com/gregoryyoung/m-r
    • A good demo and starting point but seems to leave a lot still to be developed
      into a reusable, robust CQRS framework.
  • NEventStore
    – Jonathan Oliver – http://neventstore.org/
    • Seems like a project that has been battle-tested. All of their stores are SQL or NoSQL, no
      native support for GetEventStore as a storage system but we could of course
      write our own “driver”. However, unless
      I’m missing something in their documentation, it appears to be fairly agnostic
      regarding how to implement aggregates, commands, etc. It seems to focus on the storing of events
      and that’s it.

What are you hoping to get out of a framework? Around the domain using
a framework might save you a few hours of work. The reason there are
not lots of frameworks that are maintained is the framework authors
slowly come to the realization that the framework makes the problem
more difficult than less.

That said look up aggregate source by yves

Tim,

During our development we’ve looked at Frameworks, but as Greg says, it usually ends up overly complicating the solution and forcing you to work in a specific way. We have found some common components during development (View Model Builders, Aggregate Repository, etc.) which we ended up creating reusable libraries for, but past that each project usually ends up so different that a single “framework” does not fit.

If you want to take a look at some of these to see what the code looks like they are available on our github repo (https://github.com/cognisant).

AggregateSource is worth a look, it probably meets all your criteria. @yreynhout may be able to give further advice on it

Ok, great! I’ll look at those links. Thanks for the advice everyone!

Regards,

Tim Nelson