Clean Architecture keeps your business logic independent of frameworks and databases. Here’s how I implement it in .NET projects. The Layers Domain: Entities, value objects, domain events Application: Use cases, interfaces, DTOs Infrastructure: Database, external services WebAPI: Controllers, middleware Project Structure Dependency Rule Dependencies point inward. Domain has no dependencies. Application depends on Domain. Infrastructure […]
Read more →Category: Architecture
Mediator Pattern in C#: Implementing with MediatR
MediatR implements the mediator pattern in .NET, decoupling request handling from the caller. It’s become my go-to for organizing application logic. Setup Request and Handler Using in Controller Benefits Decoupled handlers – easy to test Pipeline behaviors for cross-cutting concerns Clean controller actions References MediatR GitHub
Read more →Outbox Pattern: Reliable Messaging in Distributed Systems
The Outbox Pattern solves a common problem: how do you update a database AND publish a message reliably? Without it, you risk losing messages or creating duplicates. The Problem If the publish fails, your database has the order but no event was sent. Downstream systems never know about it. The Solution Write events to an […]
Read more →Event Sourcing Fundamentals: Storing Events Instead of State
Event Sourcing flips traditional database design on its head. Instead of storing current state, you store the events that led to that state. It’s not for every project, but when it fits, it’s powerful. The Concept In a typical system, you update records in place. An order goes from “pending” to “shipped” by updating a […]
Read more →Repository Pattern in .NET Core: Implementation Guide
The Repository pattern is one of those patterns that generates debate. Some say it’s essential, others call it unnecessary abstraction over EF Core. Here’s my pragmatic take on when and how to use it. What is the Repository Pattern? A repository abstracts data access, providing a collection-like interface to your domain objects. Instead of calling […]
Read more →CQRS Pattern Explained: Separating Reads from Writes
CQRS—Command Query Responsibility Segregation—sounds intimidating, but the core idea is simple. Separate your read operations from your write operations. Here’s why you’d want to do that and how to get started. The Problem In traditional CRUD applications, the same model handles both reads and writes. This works fine until: Your read queries need different data […]
Read more →