Life Beyond Distributed Transactions: An Apostate's Implementation - Conclusion

Posts in this series: A Primer Document Coordination Document Example Dispatching Example Failures and Retries Failure Recovery Sagas Relational Resources Conclusion We started out with a common, but nearly always overlooked problem: how do we reliably coordinate activities between different transactional resources? The question we need to ask first is - do we need to coordinate these activities? Ultimately, it's a business decision about how to deal with the messiness [Read More]

AutoMapper Usage Guidelines

Configuration √ DO initialize AutoMapper once with Mapper.Initialize at AppDomain startup in legacy ASP.NET √ DO use the AutoMapper.Extensions.Microsoft.DependencyInjection package in ASP.NET Core with services.AddAutoMapper(assembly[]) X DO NOT call CreateMap on each request X DO NOT use inline maps √ DO organize configuration into profiles √ CONSIDER organizing profile classes close to the destination types they configure X DO NOT access the static Mapper class inside [Read More]

Life Beyond Distributed Transactions: An Apostate's Implementation - Relational Resources

Posts in this series: A Primer Document Coordination Document Example Dispatching Example Failures and Retries Failure Recovery Sagas Relational Resources Conclusion Sample code from this series So far in this series we've mainly concerned ourselves with a single resource that can't support distributed (or multi-entity) transactions. While that is becoming less common as NoSQL options, as Azure CosmosDB supports them, and with the 4.0 release, MongoDB now supports multi-document [Read More]

AutoMapper 8.0.0 Released

Today we released AutoMapper 8.0.0: Upgrade Guide Release Notes AutoMapper 8.0 brings some breaking API changes, meant to simplify our configuration options which have grown quite a bit over time and remove some confusion about what configuration options were effectively equivalent. The upgrade guide walks through the breaking changes. The motivation for breaking the API also came from some confusion around mapping configuration used for in-memory mappings [Read More]

Life Beyond Distributed Transactions: An Apostate's Implementation - Sagas

Posts in this series: A Primer Document Coordination Document Example Dispatching Example Failures and Retries Failure Recovery Sagas Relational Resources Conclusion Sample code from this series So far in this series, we've looked at the ins and outs of moving beyond distributed transactions using persisted messages as a means of coordination between different documents (or resources). One common question in the example I give is "how do I actually make [Read More]