Module boundaries
Keep the internals private.
Each module has its own EF Core context and schema. Tests catch the wrong project reference. Only the event contract crosses the boundary.
Create an event, publish it, then reserve seats across two modules. Follow the full flow, with each module owning its data and code.
You'll also get The .NET Weekly newsletter. Unsubscribe anytime.
Created by Milan Jovanović
.NET and software architecture
2
Business modules
1
PostgreSQL database
.NET 10
Framework
Free
Source code
Events owns the event. Ticketing owns the seats. A small contract joins them. Inside each module, the code is grouped by feature.
Module boundaries
Each module has its own EF Core context and schema. Tests catch the wrong project reference. Only the event contract crosses the boundary.
Features you can follow
A feature keeps its request, handler, and endpoint together. Start with PublishEvent, then follow the message into Ticketing.
Outbox + inbox
A local worker moves events between modules. The inbox stops a repeat delivery from creating a second copy of the event.
Real database tests
Tests use PostgreSQL to check parallel requests, retries, and failed delivery. The demo also checks that a retry does not take more seats.
Unzip the project and open it in your editor. You need Docker with Compose. The containers include the .NET SDK.
The demo needs PowerShell 7. You can also use requests.http to create an event, publish it, and reserve seats.
src/Modules/EventsEvent data and outbox
src/Modules/Events.ContractsThe public message
src/Modules/TicketingSeats, reservations, inbox
tests/Starter.TestsBoundary and flow tests
Copy .env.example to .env and set POSTGRES_PASSWORD. Then run:
docker compose up --build -dWait for http://localhost:5088/health/ready to report ready, then run the demo.
pwsh -NoProfile -File scripts/demo.ps1Create → publish → reserve
The full .NET 10 source, Docker Compose setup, database migrations, tests, sample requests, a demo script, and guides to the code and failure paths.
This is a smaller starter based on the module patterns in my Evently course. It focuses on Events and Ticketing. It does not include the full course project or lessons.
Start with PublishEvent in the Events module. Follow its outbox message into Ticketing, then read the reservation feature and its tests. The run guide names each file in the flow.
Get the source, tests, and run guide in one free download.
Get the free templateNo credit card. Runs locally with Docker Compose.