mehdihadeli / awesome-software-architecture

🚀 A curated list of awesome articles, videos, and other resources to learn and practice software architecture, patterns, and principles.
https://awesome-architecture.com
Creative Commons Zero v1.0 Universal
7.88k stars 627 forks source link

Add sample AntonioFalcaoJr/EDA.CleanArch.DDD.CQRS.EventSourcing #58

Closed MarcusViniciusSS closed 1 year ago

MarcusViniciusSS commented 1 year ago

image

The main objective of this cloud-native project is to represent the state of the art of a distributed, reliable, and highly scalable system by interpreting the most relevant principles of Reactive Domain Driven Design.

Domain-Driven Design can aid with managing uncertainty through the use of good modeling. -- Vaughn Vernon

Scalability and resiliency require low coupling and high cohesion, strongly linked to the proper understanding of the business through well-defined boundaries in an Event-driven architecture (EDA).

The EventStorming workshop provides a practical strategy for decomposition by subdomain, aggregating correlated business capabilities in respective boundaries via the Pivotal Domain Events (business facts) that offer an efficient and healthy integration between Bounded Contexts.

Independence, as the main characteristic of a microservice, can only be found in a Bounded Context.

The event-sourcing is a proprietary implementation, which in addition to being naturally auditable and data-driven, represents the most efficient persistence mechanism ever. An eventual state transition Aggregate design is essential at this point. The Event Store comprises EF Core (ORM) + MSSQL (Database).

Projections are asynchronously denormalized and stored on a NoSQL Database(MongoDB); nested documents should be avoided here. Each projection has its index and fits perfectly into a view or component, mitigating unnecessary data traffic and making reading as efficient as possible.

The splitting between Command and Query stacks occurs logically through the CQRS pattern and fiscally via a Microservices architecture. Each stack is an individual deployable unit and has its own database.

As a Domain-centric approach, Clean architecture provides the appropriate isolation from Core Domain.

State transitions are an important part of our problem space and should be modelled within our domain. -- Greg Young