gitmyhub

modular-monolith-with-ddd

C# ★ 14k updated 2y ago

Full Modular Monolith application with Domain-Driven Design approach.

A complete, real-world .NET application in C# that shows how to structure a large app into clean, self-contained modules using Domain-Driven Design and CQRS.

C#.NETReactSQLsetup: moderatecomplexity 4/5

This repository is a full, working .NET application built in C# that demonstrates how to structure a moderately large application as a modular monolith using Domain-Driven Design principles. A modular monolith means the code runs as a single deployed application, but is organized internally into clear, self-contained modules rather than a tangle of interconnected code. Domain-Driven Design is an approach where the structure of the code closely mirrors the real-world business concepts and rules it represents.

The author built this because most example projects on GitHub that claim to show these patterns are either too simple to be useful, unfinished, or do not clearly explain the decisions behind them. The goal here is to show what a real, production-ready implementation looks like, including things like authentication, logging, unit tests, integration tests, event sourcing, and database change management.

The business domain chosen for the example is a meeting-group organizer, similar to Meetup.com. Users can join groups, create meetings, and interact with other members. This domain was picked because it is familiar to many people, has real business rules beyond simple create-read-update-delete operations, and does not require specialized knowledge to understand.

The project also uses an architectural pattern called CQRS, which separates the actions that read data from the actions that write data. There is a companion front-end application built in React. The README includes diagrams, architecture decision records, and detailed explanations of each design choice.

The project requires a stance on the Russia-Ukraine conflict as a condition of use, as stated in the repository itself. The full README is longer than what was shown.

Where it fits