Tutorials Design Patterns in C#
Domain Events Pattern — Complete Guide
Domain Events 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 43 of 69
Domain Events Pattern
GoF Core ✓ → Enterprise ✓ → Cloud & Craft
Cloud & Craft · 3 — Microservices & interviews · ~6 min · Module 5: Modern Enterprise Patterns
What is this?
Domain events record something that happened in the domain (OrderPlaced) raised by aggregates and handled inside or outside the process.
Why should you care?
ShopNest Order aggregate should announce facts without knowing about email or search.
See it live — copy this example
Paste into a C# console or class library project and run dotnet run.
public sealed class Order
{
private readonly List<object> _events = new();
public IReadOnlyList<object> DomainEvents => _events;
public void Place(string sku)
{
Console.WriteLine($"order placed {sku}");
_events.Add(new OrderPlaced(sku));
}
}
public sealed record OrderPlaced(string Sku);
var order = new Order();
order.Place("HD-100");
foreach (var e in order.DomainEvents) Console.WriteLine(e.GetType().Name);
Run Example »
Edit the code below and click Run to see the result in Toolliyo’s live editor.
What happened?
- Aggregate records events; application layer dispatches after commit (often with outbox).
- Keep events past-tense facts.
Practice next
- Place an order and list events.
- Clear events after dispatch.
- Handler sends email on OrderPlaced.
- Add OrderCancelled event.
- Include OrderId in the payload.
Remember
Past-tense domain facts. Raised by aggregates. Dispatched by application layer.
ShopNest OrderPlaced
Order raises OrderPlaced; email handler reacts.
Outcome: Domain stays free of SMTP details.
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!