Repolode
evolutionary-architecture

evolutionary-architecture/evolutionary-architecture-by-example

A step-by-step .NET 9 example repository showing how a fitness-studio system evolves from a simple monolith to a modular monolith, microservices and tactical DDD.

Stars
3,577
Forks
550
Open issues
15
Last commit
12 days ago

What is it?

Evolutionary Architecture by Example is a teaching repository for .NET software architecture. It follows a fictional fitness studio application called Fitnet through four chapters: starting as a single well-organized project, separating modules into purpose-built projects, extracting a first microservice with a real message queue, and finally applying tactical Domain-Driven Design such as value objects, aggregates and domain events.

The repository also covers the strategic side of the work: domain decomposition into subdomains with Event Storming and Domain Storytelling, defining bounded contexts, and choosing how much architecture each module needs. Each chapter has its own guide and interactive diagrams, and architecture decisions are recorded in a decision log.

The code is written in C# on .NET 9 with minimal APIs, and uses libraries such as MediatR, Dapper, Entity Framework, FluentValidation, .NET Aspire and Testcontainers. Frontend choice, logging and contract testing are left to the reader.

Key features

  • 01Walks through four chapters that evolve one codebase from a single project to microservices
  • 02Shows how to separate modules by their complexity instead of applying one architecture everywhere
  • 03Covers domain decomposition with Event Storming and bounded context design
  • 04Demonstrates tactical DDD concepts including value objects, aggregates and domain events
  • 05Built with C# and .NET 9 using minimal APIs and MediatR

Use cases

  • Learning when to move from a monolith to a modular monolith or microservices
  • Studying how to apply DDD incrementally in an existing .NET codebase
  • Preparing architecture discussions with a concrete, evolving example
  • Exploring how to introduce a message queue between modules

Things to know

  • The frontend is not included; the README leaves frontend technology choice to the reader.
  • Logging and contract testing are left to the reader, with Serilog and Pact Net suggested but not provided.

In collections

Topics

#software-architecture#domain-driven-design#modular-monolith#microservices#dotnet#csharp#clean-architecture#architecture#architecture-components#architecture-decision-records

FAQ

What is evolutionary-architecture-by-example?
A step-by-step .NET 9 example repository showing how a fitness-studio system evolves from a simple monolith to a modular monolith, microservices and tactical DDD. Evolutionary Architecture by Example is a teaching repository for .NET software architecture. It follows a fictional fitness studio application called Fitnet through four chapters: starting as a single well-organized project, separating modules into purpose-built projects, extracting a first microservice with a real message queue, and finally applying tactical Domain-Driven Design such as value objects, aggregates and domain events.
Is evolutionary-architecture-by-example free to use? What license does it have?
evolutionary-architecture-by-example is open source under the MIT license. Check the license terms before using it in commercial products.
Is evolutionary-architecture-by-example still maintained?
Actively maintained. The last commit to evolutionary-architecture-by-example was on Oct 26, 2026.
What can I use evolutionary-architecture-by-example for?
Learning when to move from a monolith to a modular monolith or microservices Studying how to apply DDD incrementally in an existing .NET codebase Preparing architecture discussions with a concrete, evolving example Exploring how to introduce a message queue between modules
Where can I get evolutionary-architecture-by-example?
The source code and installation instructions are on GitHub: https://github.com/evolutionary-architecture/evolutionary-architecture-by-example

Summary generated by AI from the project's README. GitHub stats refresh daily.

Related projects