Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
DDD Belgium Meetup 2017: Events, flows and long running services
1. Events, Flows and
Long Running Services
Domain-Driven Design Belgium
Nov 13th 2017, Gent, Belgium
mail@bernd-ruecker.com
martin.schimak@plexiti.com
With thoughts from http://flowing.io
@berndruecker | @martinschimak
2. Bernd Rücker
Consultant & Dev. Advocate
10+ years workflow
Co-founder Camunda
http://bernd-ruecker.com/
Martin Schimak
Developer & Trainer, 10+ years
(de-)coding domain knowledge
DDDesign, TDD/BDD, EDA
http://plexiti.com/
http://flowing.io/
8. Request/Response: temporally coupled services
Checkout
Payment
Inventory
Shipment
„The button blinks green
if we can ship the item
within 24 hours!“
Request Response
9. Events: temporal decoupling with read models
Checkout
Payment
Inventory
Shipment
„The button blinks green
if we can ship the item
within 24 hours!“
Events are facts about
what happened (in the past)
Good
Fetched
Good
Stored
Read
Model
10. Events: extracting or adding cross-cutting aspects
Checkout
Payment
Inventory
Shipment
„Inform the customer about
steps s/he is interested in!“
Order
placed
Payment
received
Good
shipped
Notify me when …
Order placed
Payment received
Good fetched
Good shipped
Customer
Mailings
Good
fetched
12. Events: peer-to-peer choreographies
Please fetch
the goods
before waiting
for payment
Some
customers can
pay via invoice
Checkout
Payment
Inventory
Shipment
Good
fetched
Order
placed
Payment
received
Good
shipped
13. Extracting the end-to-end responsibility
Order
Checkout
Payment
Inventory
Shipment
Order
placed
Retrieve
payment
Commands have an
intent about what needs
to happen in the future
Please fetch
the goods
before waiting
for payment
Some
customers can
pay via invoice
Payment
received
Retrieve
payment
17. The danger of god services
Checkout
Payment
Inventory
Shipment
Order
„A few smart god services tell
anemic CRUD services what to do!”
Sam Newman
„Central“ order service
as bad as central ESB logic?
18. A god service is created by bad APIs
Checkout
Payment
Inventory
Shipment
Order
„Smart endpoints and
dumb pipes!”
Martin Fowler
Checkout
Payment
Inventory
Shipment
Smart endpoints
take care of a
business capability
their client does not
need to understand.
19. Ask: who is responsible to deal with problems?
Order
Credit
Card
Retrieve
Payment
Expired
The client of a dumb
service is forced to
deal with problems
which may actually be
none of his business.
„If the credit
card expired, the
customer gets
another chance
to provide new
card details!“
20. Ask: who is responsible to deal with problems?
Order
Credit
Card
„If the credit
card expired, the
customer gets
another chance
to provide new
card details!“
Expired
Smart services are
potentially long-running.
Payment
Retrieve
Payment
Payment
received
The client of a smart
service remains lean.
22. Persist thing with
Entity, Actor, …
State machine or
workflow engine
DIY
Order
Credit
Card
Payment
Payment
received
How to
implement long-
running services?
39. The DDD idea of ubiquitous language needs boundaries
Checkout
Payment
Inventory
Shipment
Ubiquitous
Language
Software
Experts
Domain
Experts
Useful models capturing
an “ubiquitous language”
need boundaries.
47. New kid on the block
https://zeebe.io/
Zeebe
Broker
Your
application
Binary (MsgPack)
Support streaming & batching
Client
Horiziontally
scalable
Append only log / event sourcing
Peer-to-peer
cluster
48. 1. Events decrease coupling? Often! But not always.
e.g. events decrease coupling when used for read-models and cross-cutting concerns,
but: be careful to introduce complex peer-to-peer event chains – consider commands
2. Central control is bad? It can be! Respect the BC!
e.g. ESB smartness, god services often violate the odea of bounded contexts,
but: don‘t throw out the baby with the bath, important business capabilities need a home
3. Workflow engines are painful? Some of them!
e.g. with „zero coding“, when violating bounded contexts, but: lightweight engines
enable long-running services, run decentralized, solve hard developer problems
50. Code online:
https://github.com/flowing
Slides & Blog:
https://bernd-ruecker.com
https://plexiti.com
With thoughts from http://flowing.io
@berndruecker | @martinschimak
https://www.infoq.com
/articles/microservice-
event-choreographies
51. Images licensed from iStock
no attribution required
All icons licensed from Noun Project
no attribution required
Images licensed under Creative Commons license
Photo by 0xF2, available under
Creative Commons BY-ND 2.0 license.
https://www.flickr.com/photos/0xf2/2987
3149904/