Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
#2 NestJS Paris meetup - NestJS & Event Store
Search
Sylvain PONTOREAU
September 10, 2019
Programming
0
680
#2 NestJS Paris meetup - NestJS & Event Store
NestJS & Event Store (CQRS & Event Sourcing)
Presenation made during NestJS Paris meetup.
Sylvain PONTOREAU
September 10, 2019
Tweet
Share
More Decks by Sylvain PONTOREAU
See All by Sylvain PONTOREAU
aMS Lausanne - Préparez-vous à une virée intersidérale avec Azure Cosmos DB 🧑🚀
spontoreau
0
15
TypeScript - 45 minutes pour s’y mettre !
spontoreau
0
110
Event Sourcing avec Azure, quelle base de données choisir
spontoreau
0
30
Decorators in TypeScript 5.0, everything you need to know!
spontoreau
0
400
Leverage your CI/CD at the next level with Github actions
spontoreau
0
9
Commit comme un(e) "Hipster" avec Gitmoji !
spontoreau
0
100
Bird of a Feather - TypeScript (Devoxx 2022)
spontoreau
0
17
GitHub - Du besoin jusqu'à la production avec Github et Azure
spontoreau
0
18
Behavior Driven Development
spontoreau
1
210
Other Decks in Programming
See All in Programming
ECS向けのドリフト検知機構を実装してみた
tkikuc
0
270
5年分のツケを一気に払った話
soogie
3
1.1k
ポケモンで考えるコミュニケーション / Communication Lessons from Pokémon
mackey0225
4
140
モジュラモノリス、その前に / Modular monolith, before that
euglena1215
4
530
RemixとCloudflare Stack におけるFile Upload
ossamoon
1
120
AWS CDKを用いたセキュアなCI/CDパイプラインの構築 / Build a secure CI/CD pipeline using AWS CDK
seike460
PRO
3
500
CSC509 Lecture 01
javiergs
PRO
1
200
CDKを活用した 大規模コンテナ移行 プロジェクトの紹介
yoyoyopg
0
230
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
6
220
Beyond the RuboCop Defaults
koic
2
480
tsconfig.jsonの最近の新機能 ファイルパス編
uhyo
6
1.3k
Go製CLIツールGatling Commanderによる負荷試験実施の自動化
okmtz
3
650
Featured
See All Featured
The Brand Is Dead. Long Live the Brand.
mthomps
53
38k
Docker and Python
trallard
40
3k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
42
6.5k
Designing for humans not robots
tammielis
249
25k
Statistics for Hackers
jakevdp
796
220k
Embracing the Ebb and Flow
colly
83
4.4k
jQuery: Nuts, Bolts and Bling
dougneiner
61
7.5k
No one is an island. Learnings from fostering a developers community.
thoeni
19
2.9k
StorybookのUI Testing Handbookを読んだ
zakiyama
26
5.1k
Product Roadmaps are Hard
iamctodd
PRO
48
10k
Six Lessons from altMBA
skipperchong
26
3.4k
Side Projects
sachag
452
42k
Transcript
September 10, 2019 | NestJS Paris | Sylvain Pontoreau NestJS
& Event Store
Formerly Microsoft In ❤ with Co-organizer Who I am? @spontoreau
Paris TypeScript @ParisTypeScript www.typescript.paris
Domain Driven Design • DDD is not a Framework nor
a Methodology… • … it's an approach to dealing with complexity • DDD focusing: • The domain representation • The domain logic • Technical aspects are secondary • Just a part that enforcing the domain
Opposite of Data Driven Development Data Driven Development Domain Driven
Design != Data structure Entity Relationship CRUD Behavior Bounded Context Event
Query Just a read operation Command Data validation Business logic
Persistence CQRS
CQRS GetBookById Query CreateBook Command GetAllBook Query DeleteBook Command …
… Dispatcher Read DB Dispatcher QueryHandler CommandHandler Write DB Validation Plugin Monitoring Plugin Telemetry Plugin … Eventual consistency
https://martinfowler.com/eaaDev/EventSourcing.html Event Sourcing
Event Sourcing & CQRS
CQRS & Event Sourcing GetBookById Query CreateBook Command GetAllBook Query
DeleteBook Command … … Dispatcher Read DB Dispatcher QueryHandler CommandHandler Event Store Projection Projection AggregateRoot State Events
Our focus in this talk GetBookById Query CreateBook Command GetAllBook
Query DeleteBook Command … … Dispatcher Read DB Dispatcher QueryHandler CommandHandler Event Store Projection Projection AggregateRoot State Events
NestJS, Commands, Aggregates & Events Command Bus EventBus EventPublisher Repository
CommandHandler Controller/Service Aggregate Execute Comand Execute Handler Get Aggregate Merge Aggregate Apply events Execute behaviors IEventPublisher Publish events DefaultPubSub Default implementation EventHandler EventStore Publisher
Custom EventPublisher & MessageSource import { IEvent } from './event.interface';
export interface IEventPublisher { publish<T extends IEvent>(event: T); } import { Subject } from 'rxjs'; import { IEvent } from './event.interface'; export interface IMessageSource { bridgeEventsTo< T extends Ievent >(subject: Subject<T>); } • IEventPublisher • MessageSource export class UserModule implements OnModuleInit { constructor( private readonly eventBus: EventBus, private readonly eventStorePublisher: EventStorePublisher ) {} onModuleInit() { this.eventBus.publisher = this.eventStorePublisher; } } • Module
Which database for storing events? Choose what you want! Please
try me!!!
Event Store, the stream database https://eventstore.org
Demo
Resources • CQRS & Event Sourcing • CQRS pattern: https://docs.microsoft.com/en-US/azure/architecture/patterns/cqrs
• Event Sourcing pattern: https://docs.microsoft.com/en-us/azure/architecture/patterns/event-sourcing • Tackle business complexity in a Microservice with DDD and CQRS: https://docs.microsoft.com/en- us/dotnet/standard/microservices-architecture/microservice-ddd-cqrs-patterns/ • NestJS CQRS module: https://docs.nestjs.com/recipes/cqrs • Event Store website: https://eventstore.org • Talk’s sample: https://github.com/spontoreau/nestjs-eventstore-demo • node-eventstore-client NPM package: https://github.com/nicdex/node-eventstore-client • gereventstore-pomise NPM package : https://github.com/RemoteMetering/geteventstore-promise • Jérôme Rouaix presentation on CQRS & ES: https://gitpitch.com/jrouaix/cqrs-es-presentation/master#/ • Arnaud Lemaire talk on CQRS, ES and DDD: https://www.youtube.com/watch?v=qBLtZN3p3FU • Greg Young, A decade of DDD, CQRS and ES: https://www.youtube.com/watch?v=LDW0QWie21s
Questions?
Thank you!