Aggregate Root - How to Build One for CQRS and Event Sourcing

Aggregate Root – How to Build One for CQRS and Event Sourcing

An aggregate root is at the heart of your domain. I am going to dissect a simple implementation of an Aggregate Root and reveal how it works in a CQRS and Event Sourced system. Before we dive in, we need to fly through some terms often used in DDD.Continue reading

Is a 100% Provable Audit Log Possible? – Hint, with Event Sourcing it Is and I’ll Show You How

If you’ve been developing for any length of time you’ve probably had to create an audit log. Here’s the question though, are any of these logs, a 100% provable audit of all changes in the system? I’m guessing not. With event sourcing, a 100% provable event log just happens to be a handy by product. So how does it work and how can you implement it?

Continue reading

Eventual consistency

4 Ways to Handle Eventual Consistency on the UI

Ever tried to hold a writhing slippery eel in your hands? In case you haven’t, its hard. Building a UI for a CQRS system needn’t be that tricky but you do need to contend with some interesting challenges:

  1. The commands ‘complete’ far faster than you may expect –  compared to a consistent application.
  2. The read model is ‘eventually consistent’.

But what is ‘eventual consistency’? ‘Eventual consistency’ is when a read of the data store may return stale results. That is a command has completed but the data store is not yet reflecting the change. This state in a typical line of business application can last for ten’s to the mid hundreds of milliseconds. The actual time is dependant on the specifics of the application. This presents a challenge for designing the user experience. Here are 4 possible approaches to solving this issue.Continue reading

6 Code Smells with your CQRS Events – and How to Avoid Them

When starting out with CQRS, designing the ‘events’ is not always obvious or easy. The more experienced you are, the more likely your habits will lead you astray.  This post will help you spot the problems early and stay on the right track.Continue reading

UI Wireframe

How to Build a Master Details View when using CQRS and Event Sourcing

One of the most liberating things about the CQRS ES way, is the simplicity of the read side. However, if you are new to CQRS you may have wondered how it works. How for example, would it work for a classic master details view? You are not alone, in fact, I am writing this post in answer to exactly this question I found on stackoverflow:

“So my question is how are people handling a screen where by for example it displays a summary of customer details and then a list of their orders with a [more detail] link etc….”Continue reading

CQRS + Event Sourcing – A Step by Step Overview

A common issue I see is understanding the flow of commands, events and queries within a typical CQRS ES based system. The following post is designed to clear up what happens at each step. Hopefully this will help you to reason about your code and what each part does.Continue reading

Handling Concurrency Conflicts

Handling Concurrency Conflicts in a CQRS and Event Sourced system

Handling Concurrency Conflicts

Imagine if it was possible, when faced with a potential concurrency issue to programmatically check if any previous ‘events’ actually conflict with the current action being requested. With a CQRS Event Sourced application, it is possible to significantly reduce the problems of concurrency and in the remainder of this article I will show you how.

Continue reading

The lightning guide to building web prototypes that impress and get commissioned

lightning

Lightning bolts

Sometimes the most effective way for a team to reason about an idea, is to build it. Wireframes are great but a prototype is far more persuasive. Beware however, prototypes have an ugly tendency to morph into the real project or become a blackhole of time. Follow these 10 tips and keep your prototype on track, and most importantly, get the project commissioned.Continue reading

5 Reasons to try Meteor

logo-meteorjs

meteorjs logo

Something new is coming to the JavaScript web development world. The problem is something new is always coming and it’s all too easy to miss the jewels in the sky from the barren chunks of rock and ice. I think Meteor could well be one of the jewels and here is 5 reasons why.Continue reading

How to including static services in a testable way

There are often times when you want to include static services in your code. For example, when accessing the file system or including an external analytics package. When you do, it presents a testability problem. Every time you exercise the code via a test, that static service is also called. This post explains a simple pattern I use to solve this issue.Continue reading