61
INTEGRATING BC PHP DUTCH 2016 #DPC16

Integrating Bounded Contexts Tips - Dutch PHP 2016

Embed Size (px)

Citation preview

Page 1: Integrating Bounded Contexts Tips - Dutch PHP 2016

INTEGRATING BCPHP DUTCH 2016 #DPC16

Page 2: Integrating Bounded Contexts Tips - Dutch PHP 2016

@BUENOSVINOS /GOODWINES/

Page 3: Integrating Bounded Contexts Tips - Dutch PHP 2016
Page 4: Integrating Bounded Contexts Tips - Dutch PHP 2016

TEXT

Page 5: Integrating Bounded Contexts Tips - Dutch PHP 2016

REAL EXAMPLES WRITTEN IN PHP SHOWCASING DDD ARCHITECTURAL STYLES, TACTICAL DESIGN, AND BOUNDED CONTEXT INTEGRATION

foreword by Matthias Noback https://leanpub.com/ddd-in-php

Page 6: Integrating Bounded Contexts Tips - Dutch PHP 2016

START

Page 7: Integrating Bounded Contexts Tips - Dutch PHP 2016

E-COMMERCE

FRAUD

GAMIFICATION

Page 8: Integrating Bounded Contexts Tips - Dutch PHP 2016

SYNC / ASYNC REST / MESSAGING

Page 9: Integrating Bounded Contexts Tips - Dutch PHP 2016

TIPS WHEN DEALING WITH DOMAIN EVENTS

Page 10: Integrating Bounded Contexts Tips - Dutch PHP 2016

DDD ARCHITECTURAL STYLES TRIP

SPAGUETTI

FRAMEWORK

HEXAGONAL

HEXAGONAL + CQRS

CQRS + ES

Page 11: Integrating Bounded Contexts Tips - Dutch PHP 2016

START FIRING DOMAIN EVENTS NOW

TIP #1

Page 12: Integrating Bounded Contexts Tips - Dutch PHP 2016

DOMAIN EVENTS ARE THING THAT HAPPEN IN OUR DOMAIN THAT DOMAIN EXPERTS CARE ABOUT

Vaughn Vernon

DEFINITION

Page 13: Integrating Bounded Contexts Tips - Dutch PHP 2016

DOMAIN EVENT INTERFACE

Page 14: Integrating Bounded Contexts Tips - Dutch PHP 2016

LOG IN ATTEMPTED DOMAIN EVENT

Page 15: Integrating Bounded Contexts Tips - Dutch PHP 2016

PUBLISHING DOMAIN EVENTS

Page 16: Integrating Bounded Contexts Tips - Dutch PHP 2016

OUR DOMAIN EVENT PUBLISHER

Page 17: Integrating Bounded Contexts Tips - Dutch PHP 2016

DO SOMETHING SIMPLE WITH THE EVENTS

TIP #2

Page 18: Integrating Bounded Contexts Tips - Dutch PHP 2016

DOMAIN EVENT SUBSCRIBER INTERFACE

Page 19: Integrating Bounded Contexts Tips - Dutch PHP 2016

LOG DOMAIN EVENTS INTO ELASTICSEARCH WITH MONOLOG

Page 20: Integrating Bounded Contexts Tips - Dutch PHP 2016

REGISTER YOUR NEW LISTENER/SUBSCRIBER

Page 21: Integrating Bounded Contexts Tips - Dutch PHP 2016
Page 22: Integrating Bounded Contexts Tips - Dutch PHP 2016
Page 23: Integrating Bounded Contexts Tips - Dutch PHP 2016

PERSIST ALL YOUR DOMAIN EVENTS IN YOUR MAIN STORAGE (DB)TIP #3

Page 24: Integrating Bounded Contexts Tips - Dutch PHP 2016

…WHEN A NEW APPLICATION ARRIVES

YOU CAN REPLAY ALL THOSE EVENTS AGAINST THE NEW APPLICATION TO LOADED WITH ALL THE INFO…

Page 25: Integrating Bounded Contexts Tips - Dutch PHP 2016

SUBSCRIBER TO PERSIST ALL DOMAIN EVENTS

Page 26: Integrating Bounded Contexts Tips - Dutch PHP 2016

LISTENER TO PERSIST ALL DOMAIN EVENTS

Page 27: Integrating Bounded Contexts Tips - Dutch PHP 2016

EVENT STORE BASED IN DOCTRINE

Page 28: Integrating Bounded Contexts Tips - Dutch PHP 2016

EVENTS IN THE DATABASE

Page 29: Integrating Bounded Contexts Tips - Dutch PHP 2016

PERSIST DOMAIN EVENTS IN THE SAME TX AS DOMAIN CHANGESTIP #4

Page 30: Integrating Bounded Contexts Tips - Dutch PHP 2016

A USER CHANGES HIS EMAILEMAILWASUPDATED

Page 31: Integrating Bounded Contexts Tips - Dutch PHP 2016

POSSIBLE SCENARIOS

Not notifying about something that happened :(

Notifying about something that do NOT happened :((

Page 32: Integrating Bounded Contexts Tips - Dutch PHP 2016

CHANGES TO YOUR DOMAIN AND DOMAIN EVENTS SUCCESS OR FAIL AT THE SAME TIME

TOGETHER

Page 33: Integrating Bounded Contexts Tips - Dutch PHP 2016

PROVIDE A REST API FOR YOUR DOMAIN EVENTS

TIP #5

Page 34: Integrating Bounded Contexts Tips - Dutch PHP 2016

…IF IT LOOSES A DOMAIN EVENT

ANOTHER APP CAN SYNC ITS STATUS WITH YOUR EVENTS API

Page 35: Integrating Bounded Contexts Tips - Dutch PHP 2016

API EVENTS ENDPOINT

Page 36: Integrating Bounded Contexts Tips - Dutch PHP 2016

API EVENTS ENDPOINT RESULT

Page 37: Integrating Bounded Contexts Tips - Dutch PHP 2016

KEEP TRACK OF LAST PUBLISHED DOMAIN EVENT

TIP #6

Page 38: Integrating Bounded Contexts Tips - Dutch PHP 2016

PUBLISHING EVENTS

Page 39: Integrating Bounded Contexts Tips - Dutch PHP 2016

SPREADING EVENTS

Page 40: Integrating Bounded Contexts Tips - Dutch PHP 2016

EVENT STORE AND MESSAGE TRACKER

Page 41: Integrating Bounded Contexts Tips - Dutch PHP 2016
Page 42: Integrating Bounded Contexts Tips - Dutch PHP 2016
Page 43: Integrating Bounded Contexts Tips - Dutch PHP 2016
Page 44: Integrating Bounded Contexts Tips - Dutch PHP 2016
Page 45: Integrating Bounded Contexts Tips - Dutch PHP 2016

USE SUPERVISORD TO CONSUME BATCH OF LIMITED DOMAIN EVENTSTIP #7

Page 46: Integrating Bounded Contexts Tips - Dutch PHP 2016

CONSUMING DOMAIN EVENTS

Page 47: Integrating Bounded Contexts Tips - Dutch PHP 2016

TEXT

Page 48: Integrating Bounded Contexts Tips - Dutch PHP 2016

USE SUPERVISOR TO FIRE WORKERS AND KEEP THEM RUNNING

Page 49: Integrating Bounded Contexts Tips - Dutch PHP 2016

USE SUPERVISOR TO FIRE WORKERS AND KEEP THEM RUNNING

Page 50: Integrating Bounded Contexts Tips - Dutch PHP 2016

USE TACTICIAN OR OTHER COMMAND BUSES

TIP #8

Page 51: Integrating Bounded Contexts Tips - Dutch PHP 2016

FROM MESSAGE TO AN COMMAND HANDLER

Page 52: Integrating Bounded Contexts Tips - Dutch PHP 2016

IF USING SYMFONY PHP-AMQPLIB/RABBITMQ-BUNDLE AND LEAGUE/TACTICIAN-BUNDLE

Page 53: Integrating Bounded Contexts Tips - Dutch PHP 2016

PROTECT YOURSELF FROM DUPLICATE MESSAGES WITH IDEMPOTENCETIP #9

Page 54: Integrating Bounded Contexts Tips - Dutch PHP 2016

TEXT

Page 55: Integrating Bounded Contexts Tips - Dutch PHP 2016

TREAT YOUR DOMAIN EVENTS AS YOUR REST API

TIP #10

Page 56: Integrating Bounded Contexts Tips - Dutch PHP 2016

DOCUMENT YOUR DOMAIN EVENTS AS YOU WOULD DO WITH YOUR REST API

Page 57: Integrating Bounded Contexts Tips - Dutch PHP 2016

USE SAMI, FOR EXAMPLE

Page 58: Integrating Bounded Contexts Tips - Dutch PHP 2016

VERSION YOUR DOMAIN EVENTS

Page 59: Integrating Bounded Contexts Tips - Dutch PHP 2016

WRAP-UP

Page 60: Integrating Bounded Contexts Tips - Dutch PHP 2016

WRAP-UP

INTEGRATING BOUNDED CONTEXT TIPS

▸ Integration strategies: Messaging (Async) over REST (Sync)

▸ Start firing Domain Events from deeper in your Model as possible

▸ Add simple listeners in your bootstrapping (Elastic + Kibana)

▸ Persist Domain Events into your main storage in the same Tx as Domain changes

▸ Provide an API endpoint for your Domain Events so other apps can get in sync

▸ Publish your Domain events to a Messaging System (RabbitMQ) and keep track of the last messages sent

▸ Protect yourself with Idem Potent operations

Page 61: Integrating Bounded Contexts Tips - Dutch PHP 2016

THANKS! @BUENOSVINOS

HTTPS://JOIND.IN/TALK/612BA