INTEGRATING BC
PHP DUTCH 2016 #DPC16
@BUENOSVINOS
/GOODWINES/
TEXT
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
START
E-COMMERCE
FRAUD
GAMIFICATION
SYNC / ASYNC
REST / MESSAGING
TIPS
WHEN DEALING WITH DOMAIN EVENTS
DDD ARCHITECTURAL STYLES TRIP
SPAGUETTI
FRAMEWORK
HEXAGONAL
HEXAGONAL + CQRS
CQRS + ES
START FIRING
DOMAIN EVENTS NOW
TIP #1
DOMAIN EVENTS ARE THING THAT
HAPPEN IN OUR DOMAIN THAT DOMAIN
EXPERTS CARE ABOUT
Vaughn Vernon
DEFINITION
DOMAIN EVENT INTERFACE
LOG IN ATTEMPTED DOMAIN EVENT
PUBLISHING DOMAIN EVENTS
OUR DOMAIN EVENT PUBLISHER
DO SOMETHING SIMPLE
WITH THE EVENTS
TIP #2
DOMAIN EVENT SUBSCRIBER INTERFACE
LOG DOMAIN EVENTS INTO ELASTICSEARCH WITH MONOLOG
REGISTER YOUR NEW LISTENER/SUBSCRIBER
PERSIST ALL YOUR
DOMAIN EVENTS IN
YOUR MAIN STORAGE
(DB)
TIP #3
…WHEN A NEW APPLICATION ARRIVES
YOU CAN REPLAY ALL THOSE EVENTS AGAINST THE
NEW APPLICATION TO LOADED WITH ALL THE INFO…
SUBSCRIBER TO PERSIST ALL DOMAIN EVENTS
LISTENER TO PERSIST ALL DOMAIN EVENTS
EVENT STORE BASED IN DOCTRINE
EVENTS IN THE DATABASE
PERSIST
DOMAIN EVENTS
IN THE SAME TX AS
DOMAIN CHANGES
TIP #4
A USER CHANGES HIS EMAIL
EMAILWASUPDATED
POSSIBLE SCENARIOS
Not notifying about something that
happened :(
Notifying about something that do NOT
happened :((
CHANGES TO YOUR DOMAIN AND DOMAIN
EVENTS SUCCESS OR FAIL AT THE SAME TIME
TOGETHER
PROVIDE A REST API
FOR YOUR DOMAIN
EVENTS
TIP #5
…IF IT LOOSES A DOMAIN EVENT
ANOTHER APP CAN SYNC ITS STATUS WITH YOUR
EVENTS API
API EVENTS ENDPOINT
API EVENTS ENDPOINT RESULT
KEEP TRACK OF
LAST PUBLISHED
DOMAIN EVENT
TIP #6
PUBLISHING EVENTS
SPREADING EVENTS
EVENT STORE AND MESSAGE TRACKER
USE SUPERVISORD TO
CONSUME BATCH OF
LIMITED DOMAIN
EVENTS
TIP #7
CONSUMING DOMAIN EVENTS
TEXT
USE SUPERVISOR TO FIRE WORKERS AND KEEP THEM RUNNING
USE SUPERVISOR TO FIRE WORKERS AND KEEP THEM RUNNING
USE TACTICIAN OR
OTHER COMMAND
BUSES
TIP #8
FROM MESSAGE TO AN COMMAND HANDLER
IF USING SYMFONY PHP-AMQPLIB/RABBITMQ-BUNDLE AND LEAGUE/TACTICIAN-BUNDLE
PROTECT YOURSELF
FROM DUPLICATE
MESSAGES WITH
IDEMPOTENCE
TIP #9
TEXT
TREAT YOUR
DOMAIN EVENTS AS
YOUR REST API
TIP #10
DOCUMENT YOUR DOMAIN EVENTS AS YOU WOULD DO WITH YOUR REST API
USE SAMI, FOR EXAMPLE
VERSION YOUR DOMAIN EVENTS
WRAP-UP
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
THANKS!
@BUENOSVINOS
HTTPS://JOIND.IN/TALK/612BA

Integrating Bounded Contexts Tips - Dutch PHP 2016