integrating bounded contexts tips - dutch php 2016

Post on 18-Jan-2017

583 Views

Category:

Software

2 Downloads

Preview:

Click to see full reader

TRANSCRIPT

INTEGRATING BCPHP 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 CHANGESTIP #4

A USER CHANGES HIS EMAILEMAILWASUPDATED

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 EVENTSTIP #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 IDEMPOTENCETIP #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

top related