embrace events and let crud die

121
Embrace Events and let CRUD die @cakper

Upload: kacper-gunia

Post on 13-Apr-2017

172 views

Category:

Engineering


0 download

TRANSCRIPT

Page 1: Embrace Events and let CRUD die

Embrace Events

and let CRUD die

@cakper

Page 2: Embrace Events and let CRUD die

Goal

Page 3: Embrace Events and let CRUD die

CRUD

Page 4: Embrace Events and let CRUD die

Who knows what CRUD is?

Page 5: Embrace Events and let CRUD die

Clients

Database

DTO’s / Domain ObjectsData

Presentation

Service

Business Logic

Page 6: Embrace Events and let CRUD die

Well known

Page 7: Embrace Events and let CRUD die

Easy to sell

Page 8: Embrace Events and let CRUD die

Tooling

Page 9: Embrace Events and let CRUD die

Who never had problems with it?

Page 10: Embrace Events and let CRUD die

Soft Delete

Page 11: Embrace Events and let CRUD die

Audit

Page 12: Embrace Events and let CRUD die

Calculating changes

Page 13: Embrace Events and let CRUD die

Scaling

Page 14: Embrace Events and let CRUD die

3rd Normal Form

Page 15: Embrace Events and let CRUD die

Optimised for write

Page 16: Embrace Events and let CRUD die

Large & slow queries

Page 17: Embrace Events and let CRUD die
Page 18: Embrace Events and let CRUD die

But that’s good!

Page 19: Embrace Events and let CRUD die

In the WRITE context

Page 20: Embrace Events and let CRUD die

What is your write:read ratio?

Page 21: Embrace Events and let CRUD die

Some of the applications are read heavy

Page 22: Embrace Events and let CRUD die

Joins are expensive

Page 23: Embrace Events and let CRUD die

Can’t we all become join vegans?

Alberto Brandolini

Page 24: Embrace Events and let CRUD die

Denormalisation

Page 25: Embrace Events and let CRUD die

Read models

Page 26: Embrace Events and let CRUD die

You have to maintain two models now

Page 27: Embrace Events and let CRUD die

What if we treat change as a first class citizen?

Page 28: Embrace Events and let CRUD die

Event Sourcing

Page 29: Embrace Events and let CRUD die

Book added to library

Book lent to reader

Book extended

Book returned

Page 30: Embrace Events and let CRUD die

Event1. something that happens or is

regarded as happening; an occurrence, especially one of some importance.

Page 31: Embrace Events and let CRUD die

Current state is a left-fold over past events

Greg Young

Page 32: Embrace Events and let CRUD die

Aggregate

Page 33: Embrace Events and let CRUD die

Consistency boundary

Page 34: Embrace Events and let CRUD die

Consuming commands

Page 35: Embrace Events and let CRUD die

Producing events

Page 36: Embrace Events and let CRUD die

Reconstituting from history

Page 37: Embrace Events and let CRUD die

Snapshotting

Page 38: Embrace Events and let CRUD die

Testing

Page 39: Embrace Events and let CRUD die

State-based testing

Page 40: Embrace Events and let CRUD die

We test what changed

Page 41: Embrace Events and let CRUD die

What about things that didn’t?

Page 42: Embrace Events and let CRUD die

Behaviour-based testing

Page 43: Embrace Events and let CRUD die

Given:Book“DDD”wasaddedtolibrary

When:Readerlends“DDD”book

Then:Book“DDD”waslenttoreader

Page 44: Embrace Events and let CRUD die

Given:Book“DDD”wasaddedtolibraryBook“DDD”waslenttoreader

When:Readerlends“DDD”book

Then:Exception:Book“DDD”alreadylent

Page 45: Embrace Events and let CRUD die

Event Store

Page 46: Embrace Events and let CRUD die

Append-only

Page 47: Embrace Events and let CRUD die

Scaling

Page 48: Embrace Events and let CRUD die

Optimistic locking

Page 49: Embrace Events and let CRUD die

Retries

Page 50: Embrace Events and let CRUD die

Integration

Page 51: Embrace Events and let CRUD die

MQ

Page 52: Embrace Events and let CRUD die

REST

Page 53: Embrace Events and let CRUD die

2PC

Page 54: Embrace Events and let CRUD die

Eventual consistency

Page 55: Embrace Events and let CRUD die

Projections

Page 56: Embrace Events and let CRUD die

Query optimised storage

Page 57: Embrace Events and let CRUD die

Task-based UI

Page 58: Embrace Events and let CRUD die

Business Value of Events

Page 59: Embrace Events and let CRUD die

Insight into past data

Page 60: Embrace Events and let CRUD die

Business Intelligence

Page 61: Embrace Events and let CRUD die

Legal compliance

Page 62: Embrace Events and let CRUD die

Debugging

Page 63: Embrace Events and let CRUD die

How do we get there?

Page 64: Embrace Events and let CRUD die

Event Storming

Page 65: Embrace Events and let CRUD die

odd-looking workshop that has a massive consumption of orange sticky notes

Alberto Brandolini

Page 66: Embrace Events and let CRUD die
Page 67: Embrace Events and let CRUD die

How does it work?

Page 68: Embrace Events and let CRUD die

Start by capturing Domain Events

Page 69: Embrace Events and let CRUD die

Domain Event

Page 70: Embrace Events and let CRUD die

Book added to library

Book extended

Book added to

inventory

Reader identity

confirmed

Reader registered

Book reservation

placed

Book lent to reader

Book recalled

Book returned

Page 71: Embrace Events and let CRUD die

Behavioural mindset

Page 72: Embrace Events and let CRUD die

Timeline

Page 73: Embrace Events and let CRUD die

Book added to library

Book extended

Book added to

inventory

Reader identity

confirmedReader

registered

Book reservation

placed

Book lent to reader

Book recalled

Book returned

Page 74: Embrace Events and let CRUD die

Naming

Page 75: Embrace Events and let CRUD die

Book added to library

Book extendedBook

added to inventory

Reader identity

confirmedReader

registered

Book reservation

placed

Book lent to reader

Book recalled

Book returned

Page 76: Embrace Events and let CRUD die

Complexity

Page 77: Embrace Events and let CRUD die

Reader registered

Reader identity

confirmed

Identity Confirmed by

Carer

Deposit paid

Deposit Not Paid

Reader Account

Activated

Page 78: Embrace Events and let CRUD die

Pin point risks

Page 79: Embrace Events and let CRUD die

Risk

Page 80: Embrace Events and let CRUD die

Reader registered

Reader identity

confirmed

Identity Confirmed by

Carer

Deposit paid

Deposit Not Paid

Reader Account

Activated

Registration

Page 81: Embrace Events and let CRUD die

Right People

Page 82: Embrace Events and let CRUD die

Event sources

Page 83: Embrace Events and let CRUD die

Users

Page 84: Embrace Events and let CRUD die

Command

Page 85: Embrace Events and let CRUD die

Book Lent

Lend Book

Reader

Book Already Lent

Page 86: Embrace Events and let CRUD die

Other events

Page 87: Embrace Events and let CRUD die

Policy

Page 88: Embrace Events and let CRUD die

Book Returned

LatePenalize Lock Account

Page 89: Embrace Events and let CRUD die

Time

Page 90: Embrace Events and let CRUD die

Book reserved for the user Release book

Page 91: Embrace Events and let CRUD die

External systems

Page 92: Embrace Events and let CRUD die

External System

Page 93: Embrace Events and let CRUD die

Payment Gate Money Received

Page 94: Embrace Events and let CRUD die

Grouping commands

Page 95: Embrace Events and let CRUD die

Aggregates

Page 96: Embrace Events and let CRUD die

Book Lent

Book Returned

Book Book Extended

Return

Lend

Extend

Page 97: Embrace Events and let CRUD die

Making decision

Page 98: Embrace Events and let CRUD die

Read Model

Page 99: Embrace Events and let CRUD die

Book Returned

Book Added

Book Lent

Available Books

Page 100: Embrace Events and let CRUD die

Making it work

Page 101: Embrace Events and let CRUD die

Available Books

Reader Lend Book Book Lent

Page 102: Embrace Events and let CRUD die

User

Command

Aggregate

External System

Domain Event

Read Model

Policy

Command

UI

Picture that explains everything

by Alberto Brandolini

Page 103: Embrace Events and let CRUD die
Page 104: Embrace Events and let CRUD die

Want to facilitate it?

Page 105: Embrace Events and let CRUD die

Unlimited modelling surface

Page 106: Embrace Events and let CRUD die

No chairs

Page 107: Embrace Events and let CRUD die

Loads of sticky notes & sharpies

Page 108: Embrace Events and let CRUD die

People with questions

Page 109: Embrace Events and let CRUD die

People with answers!

Page 110: Embrace Events and let CRUD die

Final words

Page 111: Embrace Events and let CRUD die

Tools

Page 112: Embrace Events and let CRUD die

Event Store

Page 113: Embrace Events and let CRUD die

Messaging

Page 114: Embrace Events and let CRUD die

Projections

Page 115: Embrace Events and let CRUD die

Right problems

Page 116: Embrace Events and let CRUD die

Make models useful but not perfect

Page 117: Embrace Events and let CRUD die

Explicit Complexity

Page 118: Embrace Events and let CRUD die

Intention-revealing interfaces

Page 119: Embrace Events and let CRUD die

Writing software is about learning

Page 120: Embrace Events and let CRUD die

Technical excellence

Page 121: Embrace Events and let CRUD die

Thanks!@cakper