eshop-full — system architecture

Twenty projects, four layers — three done, one in progress, sixteen still to come.

This is the target shape, not a claim that it already runs end-to-end — eShop.AppHost (the Aspire orchestrator every service and container dependency registers with) is deliberately the last project added, since it can't meaningfully exist until the things it orchestrates do. Migration order is foundation-first: shared/foundation projects, then domain APIs, then background workers, then the two frontends, then eShop.AppHost, then tests/ and build/. See Event Flow for how the foundation layer's pieces actually talk to each other today.

Layers

Frontends
WebApp (React) WebBFF (Duende.BFF) Identity.WebApp (React) ClientApp (.NET MAUI)
↓ HTTP / gRPC-Web / gRPC
Domain APIs
Identity.API Catalog.API Basket.API Ordering.API Webhooks.API
↓ publish/consume integration events
Background workers
OrderProcessor PaymentProcessor WebhookClient (sample)
↓ every layer above builds on
Foundation
Shared EventBus EventBusRabbitMQ eShop.ServiceDefaults IntegrationEventLogEF
↓ orchestrates all of the above, added last
Orchestration
eShop.AppHost
done in progress not started

Foundation layer — the part that's real today

Done

Shared

  • Linked-source utilities, no .csproj
  • Compiled directly into consuming projects
Done

EventBus

  • Transport-agnostic abstractions
  • IEventBus, IIntegrationEventHandler<T>
Done

EventBusRabbitMQ

  • RabbitMQ implementation, 3-layer Decorator chain
  • 2 real upstream bugs found and fixed
Done

eShop.ServiceDefaults

  • Aspire telemetry/health-check/resilience defaults
  • Shared by every service via AddServiceDefaults()
Done

IntegrationEventLogEF

  • EF Core-backed transactional outbox
  • All 7 source files reviewed, several real fixes

Domain APIs — first one underway

In progress

Identity.API

  • Duende IdentityServer + ASP.NET Core Identity, EF Core-backed
  • Scaffold added; source review still underway
i

Every project above and below is on the Projects Reference diagram with its real one-line role. How the foundation layer's pieces publish, decorate, and persist an integration event today is on Event Flow. How each done project got to full test coverage is on Testing Strategy.