How evolutionary-architecture/evolutionary-architecture-by-example works
This repository is an educational .NET fitness-domain application presented as an architectural evolution across four chapters, not one deployable system. Its examples progress from a simple vertical-slice monolith, through separated modules, to microservice extraction and tactical domain-driven design. The tree documents contracts, passes, offers, and monthly registration reporting as domain capabilities; sampled code confirms contract signing, persistence abstractions, and event publication. Many feature implementations and chapter-to-chapter connections are represented only by paths or README descriptions, so those relationships are left unverified rather than inferred.
Main entry points: Fitnet/Program.cs Vertical-slice monolith · SignContractCommandHandler.cs Command handlers · Fitnet/Program.cs Separated modules · Fitnet.Contracts/Program.cs Microservice extraction
Components 19
Architecture Evolution
- Vertical-slice monolith
Chapter-1-initial-architecture/Src/Fitnet/Program.cs - Separated modules
Chapter-2-modules-separation/Src/Fitnet/Program.cs - Microservice extraction
Chapter-3-microservice-extraction/Fitnet.Contracts/Src/Fitnet.Contracts/Program.cs - Tactical DDD
Chapter-4-applying-tactical-domain-driven-design/Fitnet.Contracts/Src/Fitnet.Contracts/Program.cs
Fitness Features
- Contract workflows
Chapter-1-initial-architecture/Src/Fitnet/Contracts/PrepareContract/PrepareContractEndpoint.cs - Pass lifecycle
Chapter-1-initial-architecture/Src/Fitnet/Passes/RegisterPass/RegisterEndpoint.cs - Offer preparation
Chapter-1-initial-architecture/Src/Fitnet/Offers/Prepare/PassExpiredEventHandler.cs - Monthly report
Chapter-1-initial-architecture/Src/Fitnet/Reports/GenerateNewPassesRegistrationsPerMonthReport/GenerateNewPassesPerMonthReportEndpoint.cs - In-memory event bus
Chapter-1-initial-architecture/Src/Fitnet/Common/Events/EventBus/InMemory/InMemoryEventBus.cs
Contracts Service
- Contracts API
Chapter-2-modules-separation/Src/Contracts/Fitnet.Contracts.Api/Prepare/PrepareContractEndpoint.cs - Command handlers
Chapter-2-modules-separation/Src/Contracts/Fitnet.Contracts.Application/Sign/SignContractCommandHandler.cs - Contract domain
Chapter-2-modules-separation/Src/Contracts/Fitnet.Contracts.Core/Contract.cs - Contracts persistence
Chapter-2-modules-separation/Src/Contracts/Fitnet.Contracts.Infrastructure/Database/Repositories/ContractsRepository.cs - Contract command handler
Chapter-3-microservice-extraction/Fitnet.Contracts/Src/Fitnet.Contracts.Application/Sign/SignContractCommandHandler.cs - Binding contracts
Chapter-4-applying-tactical-domain-driven-design/Fitnet.Contracts/Src/Fitnet.Contracts.Core/BindingContract.cs - Signature validation
Chapter-4-applying-tactical-domain-driven-design/Fitnet.Contracts/Src/Fitnet.Contracts.Core/SignContract/Signatures/Signature.cs - Binding contract repository
Chapter-4-applying-tactical-domain-driven-design/Fitnet.Contracts/Src/Fitnet.Contracts.Application/IBindingContractsRepository.cs - Contract signed event
Chapter-4-applying-tactical-domain-driven-design/Fitnet.Contracts/Src/Fitnet.Contracts.IntegrationEvents/ContractSignedEvent.cs
Other components
- Fitness users
Connections 15
- Vertical-slice monolith → Contract workflows: registers
Chapter-1-initial-architecture/Src/Fitnet/Program.cs - Vertical-slice monolith → Pass lifecycle: registers
Chapter-1-initial-architecture/Src/Fitnet/Program.cs - Vertical-slice monolith → Offer preparation: registers
Chapter-1-initial-architecture/Src/Fitnet/Program.cs - Vertical-slice monolith → Monthly report: registers
Chapter-1-initial-architecture/Src/Fitnet/Program.cs - Vertical-slice monolith → In-memory event bus: configures
Chapter-1-initial-architecture/Src/Fitnet/Program.cs - Vertical-slice monolith → Separated modules: evolves into
- Separated modules → Contracts API: registers
- Separated modules → Microservice extraction: evolves into
- Microservice extraction → Contract command handler: hosts
- Microservice extraction → Tactical DDD: evolves into
- Tactical DDD → Command handlers: registers
- Command handlers → Signature validation: validates with
- Command handlers → Binding contract repository: writes through
- Binding contract repository → Binding contracts: returns
Chapter-4-applying-tactical-domain-driven-design/Fitnet.Contracts/Src/Fitnet.Contracts.Application/IBindingContractsRepository.cs - Command handlers → Contract signed event: publishes