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.
+