项目作者: NilavPatel

项目描述 :
CQRS sample application and architecture
高级语言: C#
项目地址: git://github.com/NilavPatel/Todo.CQRS.git
创建时间: 2021-04-07T14:07:26Z
项目社区:https://github.com/NilavPatel/Todo.CQRS

开源协议:MIT License

下载


CQRS + ES + DDD + .NET 5.0

CQRS stands for Command and Query Responsibility Segregation
ES stands for Event Sourcing
DDD stands for Domain Driven Design

Features

  • Commands and handlers
  • Domain models (Aggregates)
  • Aggregate repository
  • Event sourcing using EventStore
  • Domain events and handlers (Projections)
  • Integration events and handlers (Cross module projections)
  • Read models
  • Query controllers
  • Unit of work, Read repository, Write repository
  • Auto registration of commands, events and their handlers
  • Unit of work for multiple aggregates
  • Snapshots, Snapshot repository, Snapshot storage in eventstore db
  • Checkpoint, Checkpoint repository, Checkpoint storage in eventstore db
  • Class for sequential GUIDs
  • Entity tracking for write repository and no tracking for read repository

Notes:

  • Inherit domain model with AggregateRoot or SnapshotAggregateRoot<Snapshot>.
  • Domain model must have a parameterless constructor with a private access modifier.
  • Set all setters with private modifier to all properties in the domain model.
  • Domain layer has no dependencies except Contracts layer.
  • All business logic and validation should be written in domain models.
  • Contracts contain Command and Event classes, no business logic should be written in Contracts.
  • All database updates are done from EventHandler only.
  • Use IReadRepository for query controllers.
  • Use sequential Guids CombGuid.NewGuid() instead of Guid.NewGuid().
  • Use IUnitOfWork to update data in event handlers.
  • Start background processor before starting web app
  • AggregateVersion start from 1, where in EventStore event version start from 0.

How to configure Eventstore?

Diagrams:

CQRS
AggregateRepository-GetAggregate