The Real Difference Between Domain and Application Layer in Clean Architecture

I’ve lost count of how many times I’ve seen developers struggle with this question: “Should this logic go in the Domain layer or the Application layer?” Clean Architecture diagrams make it look simple, but when you’re staring at your actual codebase, the lines blur fast. You know the situation. You’ve got a business rule to implement. You open your project, see both folders, and pause. Put it in the wrong place, and six months later you’re wrestling with a mess of tangled dependencies and logic that’s impossible to test. ...

November 22, 2025 · 12 min

Integration Testing ASP.NET Core APIs The Right Way with WebApplicationFactory

A comprehensive guide to integration testing ASP.NET Core APIs with WebApplicationFactory. Learn to replace real databases, mock services, test authenticated endpoints, and build production-ready test suites.

November 16, 2025 · 7 min
An illustration of a Swiss Army knife with an absurd number of impractical tools, representing the "generic hell" of over-engineered generic repositories.

Building Maintainable EF Core Repositories Without Generic Hell

Most EF Core projects start with a generic repository that soon turns into a mess of type parameters and leaky abstractions. In this post, learn how to design maintainable, aggregate-specific repositories that are clean, testable, and production-ready.

November 13, 2025 · Last modified: November 25, 2025 · 10 min
Diagram showing CQRS architecture in ASP.NET Core without MediatR, where controllers send commands and queries directly to their handlers without a mediator.

Implement CQRS in ASP.NET Core Without MediatR

If you’ve worked with modern ASP.NET Core, you’ve almost certainly encountered MediatR. It’s a fantastic library, and for good reason; it has become the de-facto standard for implementing the CQRS pattern in .NET, helping you build clean, decoupled, and maintainable applications. But have you ever paused to look behind the curtain? In my experience building several lean microservices, I’ve found that while MediatR is a go-to, there are times when a simpler, handcrafted approach is more effective. This post is born from that experience. ...

November 10, 2025 · Last modified: November 12, 2025 · 6 min

How to Structure Your ASP.NET Core API for Clean Testing

A practical guide to structuring ASP.NET Core APIs for reliable integration and unit testing using clean architecture principles and minimal, production-ready C# code.

November 7, 2025 · 7 min

ASP.NET Core Response Compression with Brotli & Gzip

Cut payload size by 60–80% in ASP.NET Core with built-in Brotli and Gzip compression. Step-by-step code, production tweaks, and real benchmarks.

October 23, 2025 · 4 min

Hybrid Caching Strategies Beyond MemoryCache in ASP.NET Core

Your app performs well with MemoryCache for 1K users. But when traffic scales to 10K users across three load-balanced servers, cache misses explode and response times spike to 800ms. I’ve seen production APIs crash under load because the team relied solely on MemoryCache. Here’s how we fixed it with hybrid caching strategies that combine the speed of local memory with the consistency of distributed cache. TL;DR MemoryCache works for single servers but fails in distributed environments Hybrid caching uses MemoryCache (L1) + Redis (L2) for best performance Multi-tenant apps need tenant-scoped cache keys to prevent data leakage System.Text.Json provides the best balance of performance and debuggability Monitor cache hit ratios per tenant and cache level for optimal tuning MemoryCache works great for single-server applications, but it hits hard limits in distributed environments. This guide covers hybrid caching strategies that keep your multi-tenant ASP.NET Core apps fast and scalable, with real benchmarks and production-ready code. ...

October 20, 2025 · 7 min

5 ASP.NET Core DI Scope Mistakes Developers Must Avoid

Learn how to avoid common ASP.NET Core dependency injection lifetime mistakes. This guide covers DbContext misuse, scope leaks in singletons, transient performance traps, background service issues, and middleware lifetime bugs with real production fixes.

September 26, 2025 · 8 min

Should You Use UseRouting() or MapGet() First?

Learn why UseRouting() must always come before MapGet() in ASP.NET Core and how the middleware order impacts your request pipeline.

September 23, 2025 · 3 min

SaaS Middleware Anti-Patterns: What Not to Do in ASP.NET Core

Bad middleware doesn’t just break requests, it breaks entire tenants. Learn the anti-patterns to avoid in your ASP.NET Core SaaS architecture and how to fix them.

September 19, 2025 · 9 min
×