The guiding smell of wide transactions

If you can feel a bad smell in the air, you can tell that something is rotten. The very same rule applies to sniffing out transactions spanning several entities to make a business operation complete. You may call these entities aggregates, you may call them Foo or Bar, but if transactions are wide, you’re in trouble.

But this is how it is

Top one excuse for a bed smell of wide transactions is:

But this is how my business works

And nope, it does not. If you own a bakery, and somebody comes to buy a loaf of bread won’t be going through all the baskets, touching every single loaf to select the one. You’ll just get one.

If you own a travel agency and somebody buys a trip, you won’t be calling the hotel, the airlines, the weather man to get everything aligned. You’ll just happily accept the payment, you will assign the number to this deal and make everything work underneath. If there’s a problem with a plane, you’ll rent another one etc.

There’s one body holding the invariant

The rule for making it work is to select a single body responsible for validating and holding the invariant behind business operation.

Somebody wants to buy something? Just register the order and deal with the lack of the product later.

You want to transfer money from the account? Just confirm that the source account has enough money and register the transaction. What if there’s no destination account? You can move money back to the source account. The existence of the destination account is not needed to request a transfer!

Want to know more about modelling aggregates? Grab a free e-book at masterofaggregates.com

But what if

Maybe your problem is really unique. Maybe you are unlucky and you need to span this wide transaction. There’s a huge chance though, that you can model it out. Simple as this.

 

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s