SaaS Solution Platform — Solution Architecture¶
Purpose¶
This document describes the solution-level architecture: how clients, edge, bounded-context services, and foundation platforms connect at runtime. It complements the architecture blueprint with deployment-oriented structure.
Runtime Topology¶
flowchart TB
subgraph clients [Clients]
Browser[Browser]
SPA[Blazor WASM MFE]
end
subgraph edge [Edge]
GW[API_Gateway]
Shell[Shell_Saas]
end
subgraph services [Bounded context services]
S1[TenantsSvc]
S2[CatalogSvc]
S3[EntitlementsSvc]
S4[BillingSvc]
S5[MeteringSvc]
end
subgraph foundation [Foundation]
Auth[Auth_Server]
IdP[Identity_Backend]
end
Browser --> Shell
Shell --> GW
SPA --> GW
GW --> Auth
GW --> S1
GW --> S2
GW --> S3
GW --> S4
GW --> S5
Shell --> Auth
Hold "Alt" / "Option" to enable pan & zoom
Composition with Platform Template¶
Platform Template (ConnectSoft factory) composes multi-service solutions: gateway, identity stack, documentation site, and generated microservices. SaaS bounded-context services are additional microservice instances produced from ConnectSoft.Saas.*Template—not a replacement for the Platform Template.
Factory reference: ConnectSoft Documentation — Docs/starters/templates-dependencies.md, saas-platform-solution-plan.md.
Contract Flow¶
- User authenticates via Authorization Server (OIDC).
- Shell loads MFE manifests; MFEs call BFF or gateway routes.
- Gateway validates tokens, routes to ServiceModel-backed APIs.
- Services enforce tenant/edition policy; emit integration events for cross-context workflows.
Data Ownership¶
- Each bounded context owns its database (or schema) — no shared transactional store across contexts.
- Cross-context references use IDs and events only (see integration patterns).
Physical View (Typical)¶
- Kubernetes or Azure Kubernetes Service — services as pods; gateway and shell as ingress-exposed workloads.
- Secrets — Key Vault or equivalent; no secrets in templates.
- Messaging — Optional event bus for domain/integration events (MassTransit, etc.) per service template.