Life Beyond Distributed Transactions: An Apostate's Implementation - Document Coordination

Posts in this series: A Primer Document Coordination Document Example Dispatching Example Failures and Retries Failure Recovery Sagas Sample code from this series Quick note - I've updated this post to use the more accurate term "Document" than the less-accurate, DDD-specific term "Aggregate". In the images, it still has the older term "Aggregate", let's pretend I fixed all those images. In the last post, I walked through the general problem [Read More]

Life Beyond Distributed Transactions: An Apostate's Implementation - A Primer

Posts in this series: A Primer Document Coordination Document Example Dispatching Example Failures and Retries Failure Recovery Sagas Sample code from this series For those working with SQL databases, working with transactions is more or less a given. The most we may need to worry about is: Using the appropriate isolation level Not doing too much in a single transaction to prevent excessive locks The vast majority of applications I [Read More]

MediatR 5.1 Released

This release changes the default behavior of awaiting an enumerable of Task. Previous to this release, tasks where awaited using Task.WhenAll. This causes problems in a variety of environments and situations that expect sequential ordering. In this release, the default behavior for enumerables is to await in a foreach, for: Mediator.Publish RequestPreProcessorBehavior RequestPostProcessorBehavior You can override the Mediator.Publish behavior by overriding the virtual PublishCore method, while the [Read More]

Contoso University Examples with CQRS, MediatR, AutoMapper and more

I was a bit surprised yesterday to see Scott Hanselman's post on my Contoso University sample app. That application basically takes the traditional Contoso University sample applications (of which there have been many), and try to adapt it to how our "normal" ASP.NET applications are built. Mainly these applications serve as working examples for our own internal teams, so that when we spin up a new application, we have [Read More]

Containers - What Are They Good For? Running Our CI Builds

In the last post, I looked at creating a build environment, settling on a strategy where I used Docker Compose to create our build environment. From there, I need some way to actually run our build in an environment. Typically, my Windows build run in some sort of hosted agent, whether it's AppVeyor or VSTS. The major advantage here is there's some pool of build agents that I don't really [Read More]