Message Naming Conventions

One of the first design decisions teams starting with messaging are presented with are - what the heck do we name these things? When building out request/response types for typical API/web applications, I name the responses usually after the resource they represent, or the route, or controller/action. There's something already "around" my message that tells me what to name it. Durable messages are a bit different - [Read More]

Building Messaging Endpoints in Azure - Evaluating the Landscape

Posts in this series: Evaluating the Landscape A Generic Host Azure WebJobs Azure Container Instances Azure Functions When looking at moving traditional on-prem solutions to the cloud, I try as much as possible to avoid any kind of lift-and-shift strategy and instead leverage as many platform-as-a-service (PaaS) offerings as possible. Since our systems mainly consist of web applications backed by some sort of database, it's often a fairly straightforward transition. [Read More]

Composite UIs for Microservices: Vertical Slice APIs

This is a recent follow-up pattern to my series on Composite UIs in Microservices, which explores various strategies for composing at the edges. Other posts in this series: A primer Composition options Client composition Server composition Data composition Vertical Slice APIs When looking at a client-side composition, the next logical question is "how do my client-side components communicate with services?". Typically, there are two main approaches: API Gateway Backend-for-frontend In [Read More]

MediatR 7.0.0 Released

Release notes: MediatR 7.0.0 MediatR.Extensions.Microsoft.DependencyInjection 7.0.0 It's a major release bump because of a breaking change in the API of the post-processor. Enjoy! [Read More]

AutoMapper 8.1.0 Released

Today we released AutoMapper 8.1.0: Upgrade Guide for 8.0 Release Notes AutoMapper 8.1 adds a major new feature - attribute-based maps. Attribute maps let you easily declare maps on destination types when you have straightforward scenarios. Instead of: public class OrderProfile { public OrderProfile() { CreateMap<Order, OrderIndexModel>(); CreateMap<Order, OrderEditModel>(); CreateMap<Order, OrderCreateModel>(); } } You can declare your type maps directly on [Read More]