Tutorials Clean Architecture & DDD Mastery

Domain Events: Decoupling side effects via events

On this page

Eventual Consistency

A Domain Event is something that happened in the domain that you want other parts of the same domain to react to.

1. Decoupling the "And Also"

When a user registers, you might need to send a welcome email, create a default profile, and notify the analytics team. In a messy app, you'd put all this in the RegisterUser method. In DDD, the user entity just raises a UserRegisteredEvent. Other services 'Subscribe' to this event and handle their specific tasks independently.

2. Implementation in .NET

Use an IDomainEvent interface. Entities hold a List<IDomainEvent>. When you save the entity (e.g., in your EF Core SaveChanges override), you publish these events using **MediatR**. This ensures that the primary action and its side effects happen in a clean, decoupled way.

3. Architect Insight

Q: "Should events be synchronous or asynchronous?"

Architect Answer: "Start **Synchronous** using MediatR INotification within the same database transaction. This is easiest to debug. Only move to **Asynchronous** (via SQS/Service Bus) if the side effect is slow (like sending an email) or if you are communicating across different Bounded Contexts. This is the path from Monolith to Microservices."

Questions on this lesson 0

Sign in to ask a question or upvote helpful answers.

No questions yet — be the first to ask!

Clean Architecture & DDD Mastery
Course syllabus
1. Architectural Patterns
2. Domain-Driven Design (DDD) Foundations
3. Advanced DDD Patterns
4. Implementing the Clean Layers
5. Patterns for Data & Logic
6. Enterprise Domain Challenges
7. Testing Clean Architecture
8. Real-World Case Study
Toolliyo Assistant
Ask about tutorials, ebooks, training, pricing, mentor services, and support. I use public site content only—not admin or internal tools.

care@toolliyo.com

Need callback? Share your details