From e1401eb7cfe69a879c5425832c4b448825428a9f Mon Sep 17 00:00:00 2001 From: David Eggenberger <72417712+DavidEggenberger@users.noreply.github.com> Date: Fri, 15 Dec 2023 23:04:36 +0100 Subject: [PATCH] Update README.md --- README.md | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index bcaebf2f..ce63d132 100644 --- a/README.md +++ b/README.md @@ -6,14 +6,28 @@ Starter Template for building modular monolithic SaaS applications with ASP.NET ## Architecture -The solution follows a "modular" architectural approach. The idea is, that every "Subdomain" is organised in an own module. +The solution follows a "modular" architectural approach. The idea is, that every "Subdomain" is organised in an own module. -### Solution Overview -**Shared.Kernel**: Extension methods, interfaces and BuildingBlocks that can be used by any other project.
+### Projects Overview + +**Shared.Kernel**: Extension methods, interfaces, endpoint constants and BuildingBlocks that can be used by any other project.
**Shared.DomainFeatures**: Infrastructure components (e.g. EF Core) that are used by the DomainFeatures of the Modules.
-**Shared.Web**: Endpoint Constants.
**Web.Server**: Serves the WebAssembly client and the controllers that are defined in the Modules.
**Web.Client**: The WebAssembly client application. Its pages render the components defined in the Modules.
+### Module Overview + +The **Web.Server** references the **{ModuleName.Modules.Server}** project of each Module. The there defined controllers/pages are then served by the **Web.Server**. Each Module (with the exception of **Modules.LandingPages**) follows the same setup. **Modules.LandingPages** is an exception because it only needs to serve the Razor Components for the LandingPage. The **Identity/Subscription** Modules consist of five projects. + + + +**Client**: Razor Components that are served by **Web.Client**.
+**Shared**: DTOs shared between **Client** and **Server**.
+**Server**: Controllers that dispatch the respective Command/Query.
+**DomainFeatures**: Defines the Commands/Queries and the respective Command/QueryHandlers
+**IntegrationEvents**: Project that can be referenced by other Modules. When the **DomainFeatures** publish an IntegrationEvent it can then be handled. This allows for cross Module communication. + +Besides modularity the template also follows a very pragmatic approach. The infrastructure components defined in **Shared.DomainFeatures** are not abstracted behind an interface. Instead they are directly used by the **DomainFeatures** of the respective modules. +