milanjovanovic.hashnode.devBuilding a Custom Domain Events Dispatcher in .NETDomain events are a powerful way to decouple parts of your system. Instead of tightly coupling your logic, you can publish events and have other parts of your code subscribe to those events. This pattern is especially valuable in Domain-Driven Design...May 30, 2025·7 min read
milanjovanovic.hashnode.devCQRS Pattern the Way It Should've Been From the StartMediatR is going commercial. Jimmy Bogard recently announced that MediatR will adopt a commercial license model for companies above a certain size. For many teams, this is a trigger to re-evaluate their usage and possibly look for alternatives. And i...May 16, 2025·7 min read
milanjovanovic.hashnode.devFrom Anemic Models to Behavior-Driven Models: A Practical DDD Refactor in C#If you've ever worked with a legacy C# codebase, you know the pain of an anemic domain model. You have probably opened an OrderService (all similarities to production code are merely a coincidence) and thought "this file does everything." Pricing log...May 9, 2025·6 min read
milanjovanovic.hashnode.devEvent-Driven Architecture in .NET with RabbitMQEvent-driven architecture (EDA) can make applications more flexible and reliable. Instead of one part of the system calling another directly, we let events flow through a message broker. In this quick guide, I'll show you how to set up a simple event...May 2, 2025·8 min read
milanjovanovic.hashnode.devRefactoring Overgrown Bounded Contexts in Modular MonolithsWhen you're building a modular monolith, it's easy to let bounded contexts grow too large over time. What started as a clean domain boundary slowly turns into a dumping ground for unrelated logic. Before you know it, you have a massive context respon...Apr 25, 2025·6 min read