Sunday, May 30, 2010

Things to do to fill up my free time

Now that my CQRS/Event Sourcing talk for DotNED is done, the pressure on the free hours between work and family has been reduced significantly. That doesn’t mean I’m going to sit back and relax. Oh no, I’m full of ideas. so let’s see some of my plans.

  • I’m still going to continue developing The CQRS Kitchen to find and solve all special cases you may run into when building an enterprise system using CQRS and Event Sourcing. I also want to align a bit more with the Ncqrs Framework, but I have to figure out a way to do branching and merging
    from/to the their project.
  • I’ve just started with the update of my C# 3.0 Coding Guidelines to include C# 4.0 specific guidelines, as well as some ideas from Robert C. Martin’s Clean Code book. I’ve moved all current versions to the new CodePlex site here.
  • I’ve also started creating my first FxCop / Static Code Analysis rules that should validate a large portion of the C# Coding Guidelines. The work-in-progress can be followed here.
  • Obviously, I’ll continue improving Fluent Assertions with improvements and suggestions. Currently it is stable, and I’m not aware of any major issues.
  • I still have to translate my article about User Stories and Storyotypes from Dutch to English.
  • Because of the enormous amount of effort needed for the CQRS talk, my series of posts on Application Lifecycle Management have stalled. I will continue soon though.
  • I’d like to write an article on how to write focused, maintainable unit tests dealing with TDD and BDD-style testing, state-based versus interaction-based testing, patterns such as Test Data Builder, and obviously, Fluent Assertions.
  • And of course I’ll continue submitting proposals for DotNED, SDN, SDC and other events.

Friday, May 28, 2010

CQRS and Event Sourcing

Yesterday evening I did a talk on building a .NET-based system using Command Query Responsibility Segregation and Event Sourcing. We had a lot of awesome discussions on its applicability, and as usual, I ran out of time again. I could have easily spend a full day on this subject, but unfortunately, I only had about 1 hour and 45 minutes to my disposal.

All code is available as a CodePlex project and I’ll be continuing development on the demo application so that it includes all major and all corner cases. I’m going to try to make it a great reference for anybody whose intention is to start building CQRS-based systems.

Thursday, May 06, 2010

May 27th: CQRS and Event Sourcing, an alternate architecture for Domain Driven Design

Most of us will be familiar with the standard 3- or 4-layer architecture you often see in larger enterprise systems. Some are already practicing Domain Driven Design and work together with the business to clarify the domain concepts. Perhaps you’ve noticed that is difficult to get the intention of the 'verbs' from that domain into this standard architecture. If performance is an important requirement as well, then you might have discovered that an Object-Relational Mapper and a relational database are not always the best solution.

One of the main reasons for this is the fact that the interests of a consistent domain that takes into account the many business rules, and those of data reporting and presentation are conflicting. That’s why Betrand Meyer introduced the Command Query Separation principle.

An architecture based on this principle combined with the Event Sourcing concept provides the ideal architecture for building high-performance systems designed using DDD. Well-known bloggers like Udi Dahan and Greg Young have already spent quite a lot of of posts on this, and this year’s Developer Days had some coverage as well.

But how do you build such a system with the. NET framework? Is it really as complex as some claim, or is just different work? If you want an answer to this, sign up for this evening and come see how I've built a concrete Silverlight demo app.

Subjects that I’ll cover:

  • Tasked-based UIs
  • Command Handling
  • Event Handling
  • Eventual Consistency
  • Repository & Aggregates
  • Versioning events and commands

You can find the latest details on this evening and the registration info here.