
Learn to build an event store in C# .NET and implement event-sourced architectures using business events as the source of truth for reactive, real-time insights.
Explore event sourcing and building a custom event store in C# .NET, covering domain-driven design, events, aggregates, domain events, snapshots, projections, and read models for end-to-end implementation.
Explore how event sourcing treats state changes as first-class events stored in an append-only event store, enabling replay to reconstruct history, use corrective events, and reveal richer business insights.
Explore how event-sourced systems deliver business insights through projections that answer future questions from domain events. Projections act as dynamic reports, tracing item removals and other events across time.
Explore how event-sourced systems stay sequential and append-only, delivering fast, scalable performance. Understand debugging with time travel, smoke tests, and json serialized changesets that ease persistence beyond impedance-mismatch.
Compare building your own event store with third‑party solutions, emphasizing guaranteed uniqueness, in‑process deployment, and NoSQL‑friendly serialization for CQRS and event sourcing.
Explore CQRS and event sourcing by separating commands and queries into two systems, where commands mutate state and queries read data, with idempotent queries and non-idempotent commands.
Explore implementing a sign up command in a domain driven, event sourced system using a console client, a simulated queue, and an event store to illustrate fire-and-forget commands.
Show how to implement command handlers for a sign up command, including client backend flow, JSON command serialization, and saving aggregate root with an event store in C# for CQRS.
Explore how account view queries retrieve prebuilt read models, cache results for performance, and how domain events from the event store update read models and search indexes.
Apply the aggregate root pattern in domain-driven design to enforce invariants, process commands via handlers, emit domain events, and persist them in a DynamoDB-backed event store with concurrency checks.
Explore the high-level architecture of a C# .NET event store for CQRS and event sourcing, including aggregate roots, domain events, change sets, and DynamoDB storage.
Assess append-only event stores with duplicate-free persistence, prioritizing high read throughput and in-process operation using DynamoDB’s NoSQL approach over SQL options.
Explore using DynamoDB as a scalable, fully managed event store with two tables, hash key uniqueness, and consistent reads to ensure one-time writes. Use a condition expression to prevent duplicates.
Develop a C# console app with a task-based UI; build repositories and a DynamoDB event store with aggregates, aggregate roots, value objects, domain events, and in-memory tests (plus changesets table).
Explore data flow in a simple C# console app, showing aggregates and domain events moving through a repository to a DynamoDB event store, with optimistic concurrency via expected version.
Create two DynamoDB tables by hand for aggregates and changesets with primary keys, then automate with CloudFormation and enable streams for new changesets.
Create DynamoDB tables for aggregates and changesets in an event store using AWS CloudFormation, with YAML templates and streams to enable automated, consistent deployments worldwide.
Create a DynamoDB event store in C# and .NET Core, saving and loading domain events. Leverage change sets, aggregates, and consistent reads to support CQRS and event sourcing.
Discover how to detect and manage concurrency violations in a C# .NET event store using optimistic concurrency control, including handling exceptions, publishing a problem occurred event, and notifying clients.
Explore a memory event store implemented against the IEventStore interface to enable fast local testing and debugging of CQRS and event sourcing workflows, using dictionaries for aggregates and change sets.
Explore how snapshots back up an aggregate's state in the event store at a projection to speed reads of domain events and manage versioned events, using snapshot markers and commands.
Implement a snapshot in a C# event store using CQRS and event sourcing. Trigger a create customer snapshot command, apply the domain snapshot to the aggregate, and persist with DynamoDB.
Explore projections in a C# .NET event store for CQRS and event sourcing. Learn ad hoc, consumer driven, and publisher driven projections that enable time travel and reporting.
Implement a projection in C# .NET by creating a customer summary from domain events. The projection totals charges and builds a header with customer's name and id for CQRS event-sourcing.
Publish and consume domain events by linking the event store commit to a publication step using DynamoDB streams, Lambda, and SNS, enabling multiple read models and consumers.
Implement a consistent domain event publication pipeline using DynamoDB streams, a C# Lambda, and SNS to broadcast domain events, enabling read model consumption via a pub-sub pattern.
Turn domain events from an immutable event store into practical read models for user interfaces and other microservices, enabling structured views and screens.
Implement a read model in C# using MySQL on AWS, with CloudFormation deployment, SNS and Lambda processing domain events to maintain customer details and list for fast ui queries.
Real-time communication and feedback to your customers are more important then ever. Customers have become used to immediate feedback on the actions they take in your software. It is very hard in create, read, update, and delete (CRUD) based applications to provide this sort of responsiveness that your customers are demanding. Event-based solutions that are based on CQRS, Event Sourcing, and Domain-Driven Design (DDD) can offer deep insides in real-time to your customers and to your business. More importantly, you won't loose data in an event-sourced solution when compared to CRUD-based solutions because your solution will be able to provide the context on why changes happened and record changes into an immutable log, the event store.
In this course, you will learn about the importance of using domain events as your source of truth instead of pieces of data that are incomplete in CRUD-based applications. You will be able to tell stories on what happened when and why. You will be able to answer future questions by your customers and business even though you may not have all the requirements at hand when you design and build your event-sourced solution.
At the very heart of your solution will be the event store. The event store is the source of truth in your entire solution. We will be building an event store in C#. NET and utilizing AWS DynamoDB as the persistence mechanism. However, the provided C# source code can easily be converted to Java or other languages. For the actual persistence, you could also use MySQL, PostgreSQL, MongoDB, and others. The C# code is abstracted so that can you can re-use it for specific persistence implementations. The concepts and code can work for on-premise, cloud only, or hybrid models. For an example read model implementation, we will be creating a read model using MySQL in AWS.
Once you understand the power of event sourcing, you won't go back.