Tutorials Design Patterns in C#
CQRS Pattern — Complete Guide
CQRS Pattern — Complete Guide: free step-by-step lesson with examples, common mistakes, and interview tips — part of Design Patterns in C# on Toolliyo Academy.
On this page
Design Patterns in C# · Lesson 26 of 69
CQRS Pattern
GoF Core ✓ → Enterprise → Cloud & Craft
Enterprise · 2 — App patterns · ~6 min · Module 4: Enterprise Design Patterns
What is this?
CQRS separates commands (writes) from queries (reads), often with different models or stores optimized for each side.
Why should you care?
ShopNest checkout writes want normalized integrity; order history reads want denormalized speed.
See it live — copy this example
Paste into a C# console or class library project and run dotnet run.
public sealed record PlaceOrderCommand(string Sku, int Qty);
public sealed class PlaceOrderHandler
{
public Task Handle(PlaceOrderCommand cmd)
{
Console.WriteLine($"WRITE order {cmd.Sku} x{cmd.Qty}");
return Task.CompletedTask;
}
}
public sealed class OrderHistoryReadModel
{
public string GetHistory(string userId) => $"orders for {userId}"; // denormalized store
}
await new PlaceOrderHandler().Handle(new PlaceOrderCommand("HD-100", 1));
Console.WriteLine(new OrderHistoryReadModel().GetHistory("u1"));
Run Example »
Edit the code below and click Run to see the result in Toolliyo’s live editor.
What happened?
- Commands mutate write models; queries hit read models.
- They can share one DB with different tables or diverge fully.
- Accept short read lag when projected asynchronously.
Practice next
- Run place + history sample.
- Split write/read interfaces in your app.
- Document lag for UI after write.
- Return order id from handler.
- Add GetById read model method.
Remember
Separate write/read paths. Optimize each side. Use when shapes diverge.
ShopNest orders CQRS
PlaceOrder writes; history reads a projection.
Outcome: Checkout stays simple; history stays fast.
Interview prep for this lesson
Practice these questions aloud after reading—each links to a full structured answer.
Sign in to ask a question or upvote helpful answers.
No questions yet — be the first to ask!