|
5 | 5 | OpenDDD.NET |
6 | 6 | =========== |
7 | 7 |
|
8 | | -OpenDDD.NET is an open-source framework for domain-driven design (DDD) development using C# and ASP.NET Core. It provides a set of powerful tools and abstractions to help developers build scalable, maintainable, and testable applications following the principles of DDD. |
| 8 | +**OpenDDD.NET** is an opinionated framework for building Domain-Driven Design (DDD) applications on ASP.NET Core. |
| 9 | + |
| 10 | +It lets you focus on modeling your aggregates, domain services, and domain events — while the framework handles persistence, messaging, and transactional consistency. |
| 11 | + |
| 12 | +> **Focus on your domain model. Forget the plumbing.** |
| 13 | + |
| 14 | +--- |
9 | 15 |
|
10 | 16 | Purpose |
11 | 17 | ------- |
12 | 18 |
|
13 | | -The purpose of OpenDDD.NET is to simplify the adoption of DDD principles by offering ready-to-use building blocks, enabling developers to focus on business logic rather than infrastructure concerns. |
| 19 | +OpenDDD.NET exists to help developers adopt DDD in real-world .NET applications without spending time wiring infrastructure. |
| 20 | + |
| 21 | +It provides all the essential building blocks — aggregates, repositories, domain services, event handling, persistence, and messaging — with drop-in setup, automatic registration, and a convention-over-configuration approach. |
| 22 | + |
| 23 | +--- |
14 | 24 |
|
15 | 25 | Key Features |
16 | 26 | ------------ |
17 | 27 |
|
18 | | -- **Aggregates**: Define domain aggregates with clear boundaries and encapsulate domain logic within them. |
19 | | -- **Entities and Value Objects**: Create entities and value objects to represent domain concepts and ensure strong type safety. |
20 | | -- **Repositories**: Abstract away data access and enable persistence of domain objects. |
21 | | -- **Domain Events**: Facilitate communication between domain objects while maintaining loose coupling. |
22 | | -- **Integration Events**: Enable communication between bounded contexts in distributed systems. |
23 | | -- **Event Listeners**: Manage event listeners to handle domain and integration events for scalable, event-driven architectures. |
24 | | -- **Domain Services**: Encapsulate domain-specific operations that do not naturally belong to an entity or value object. |
25 | | -- **Application Services**: Use Action classes to coordinate the execution of domain logic in response to commands. |
26 | | -- **Infrastructure Services**: Provide implementations for technical concerns such as logging, email, or external integrations. |
27 | | -- **Transactional Outbox**: Ensure event consistency by persisting and publishing events as part of database transactions. |
| 28 | +- **Aggregate Roots, Entities, Value Objects** — Built-in base classes for modeling your domain. |
| 29 | +- **Domain Services** — For domain logic that doesn’t naturally fit inside an aggregate. |
| 30 | +- **Domain Events & Integration Events** — Publish events inside and outside the boundary of your service. |
| 31 | +- **Repository Abstractions** — Works with PostgreSQL, SQL Server, SQLite, EF Core, and InMemory. |
| 32 | +- **Messaging Abstraction** — Supports RabbitMQ, Azure Service Bus, Kafka, and InMemory. |
| 33 | +- **Transactional Outbox** — Guarantees reliable and atomic event publishing. |
| 34 | +- **Automatic Registration** — The framework automatically registers repositories, domain services, actions, event listeners, and infrastructure services based on conventions. |
| 35 | +- **Drop-in Setup** — Configure once in `Program.cs` and `appsettings.json`, and you're ready to go. |
| 36 | +- **Opinionated but Flexible** — Use convention-over-configuration or break out and compose manually. |
| 37 | + |
| 38 | +--- |
| 39 | + |
| 40 | +Source Code |
| 41 | +----------- |
| 42 | + |
| 43 | +The source code is available on GitHub: |
| 44 | +`https://github.com/runemalm/OpenDDD.NET <https://github.com/runemalm/OpenDDD.NET>`_ |
| 45 | + |
| 46 | +--- |
28 | 47 |
|
29 | 48 | .. userguide-docs: |
30 | 49 | .. toctree:: |
|
0 commit comments