Top Banner
Event-driven Programming & Architecture @MarcoEmrich Softwerkskammer Munich Dec. 2017
53

Event Driven Programming & Architecture

Jan 29, 2018

Download

Software

marcoemrich
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Event Driven Programming & Architecture

Event-driven Programming& Architecture@MarcoEmrich Softwerkskammer Munich Dec. 2017

Page 2: Event Driven Programming & Architecture

Sixsteps.com

Page 3: Event Driven Programming & Architecture

Where?

Page 4: Event Driven Programming & Architecture

GUIhttps://www.flickr.com/photos/joris/2410290034

Page 5: Event Driven Programming & Architecture

https://www.flickr.com/photos/11319126@N00/8270409318/in/photostream

Page 6: Event Driven Programming & Architecture

Architecture

Page 7: Event Driven Programming & Architecture

Microservices

http://martinfowler.com/articles/microservices.html

Page 8: Event Driven Programming & Architecture

Evented-SOA

Page 9: Event Driven Programming & Architecture

Domain Driven Design

Page 10: Event Driven Programming & Architecture

Hexagonal Architecture

Page 11: Event Driven Programming & Architecture

Hexagonal Architecture

DomainModel

Page 12: Event Driven Programming & Architecture

Hexagonal Architecture

DomainModel

Adapter Adapter

Adapte

rAdapter

Adapte

r

Adapter

Adapter

Adapter

Page 13: Event Driven Programming & Architecture

Hexagonal Architecture

DomainModel

Adapter Adapter

Adapte

rAdapter

Adapte

r

Adapter

Adapter

Persistance

Adapter

Page 14: Event Driven Programming & Architecture

Hexagonal Architecture

DomainModel

Adapter Adapter

Adapte

rAdapter

Adapte

r

Adapter

Adapter

Persistance

Adapter

GUI

Page 15: Event Driven Programming & Architecture

Hexagonal Architecture

DomainModel

Adapter Adapter

Adapte

rAdapter

Adapte

r

Adapter

Adapter

Persistance

Adapter

GUI

Events

Events

Events

Events

Page 16: Event Driven Programming & Architecture

Event Storming

Page 17: Event Driven Programming & Architecture

What do you mean by “Event-Driven”?

Martin Fowler

Event NotificationEvent-Carried State TransferEvent SourcingCQRS

https://martinfowler.com/articles/201701-event-driven.html

Page 18: Event Driven Programming & Architecture

GeneralProgramming-Model

Page 19: Event Driven Programming & Architecture

Method vs.

Event https://www.flickr.com/photos/gen/325927418

Page 20: Event Driven Programming & Architecture

Sender ReceiverMessage

Method Call

Page 21: Event Driven Programming & Architecture

Sender ReceiverListen

Raise Event

Event

Page 22: Event Driven Programming & Architecture

Sender

ReceiverListen

Event

Raise Event Receiver

Listen

Receiver

Listen

Page 23: Event Driven Programming & Architecture

https://www.flickr.com/photos/caroslines/547184477

Wiring

Page 24: Event Driven Programming & Architecture

Sender

Receiver

Listen

Raise Event

Receiver

Listen

ReceiverListen

Sender

Raise Event

Observer

Page 25: Event Driven Programming & Architecture

Sender

Receiver

Listen

Raise Event

Receiver

Listen

Receiver

Listen

Event-BUS

Pub/Sub

Page 26: Event Driven Programming & Architecture

Event vs. Method

Method

Sender tells Receiver

Sync

Fixed Coupling

New Receiver: change to Sender

Event

Receiver listens to Sender

Sync / Async

Loose Coupling

New Receiver: no change to Sender

Sometimes: Hard to Test/Debug

Page 27: Event Driven Programming & Architecture

Testing?

Page 28: Event Driven Programming & Architecture

Winner?https://www.flickr.com/photos/48424574@N07/5096035675

Page 29: Event Driven Programming & Architecture

We want you for Kata

Page 30: Event Driven Programming & Architecture

http://udoncrew.deviantart.com/art/UFS-Impossible-Contortion-109860059

Try Extremes

Page 31: Event Driven Programming & Architecture

TDD

Page 32: Event Driven Programming & Architecture

Pair-Programming

https://www.youtube.com/watch?v=8wUOUmeulNs © 2012 Atlassian

Page 33: Event Driven Programming & Architecture

Callcenter Kata

Page 34: Event Driven Programming & Architecture

0911/123499040/456780171/3456789….

Phone Number / Caller ID

Page 35: Event Driven Programming & Architecture

0911/123499040/456780171/3456789….

Phone Number / Caller ID

0911 Nürnberg

040 Hamburg

0911/123499….

040/45678….

Page 36: Event Driven Programming & Architecture

0911/123499040/456780171/3456789….

Phone Number / Caller ID

0911 Nürnberg

0911/123499….

040/45678….

Statistik

040 Hamburg

Page 37: Event Driven Programming & Architecture

callAgency

localCallcenter„Berlin“

030/12345

Incoming Call040/12345030/12345

...

localCallcenter„Hamburg“

040/12345

statistic

Pure OO

statistic

statistic

Page 38: Event Driven Programming & Architecture

Constraints

Method-communicationno Events

Small Classes (SRP) max. 20-30 LOC max. 5 Methods

Page 39: Event Driven Programming & Architecture

GO

Page 40: Event Driven Programming & Architecture

Event Frameworks

https://www.flickr.com/photos/alebaffa/8939535066

Page 41: Event Driven Programming & Architecture

Do It Yourself

Page 42: Event Driven Programming & Architecture

Sender

Receiver

Listen

emit Event

Receiver

Listen

Receiver

Listen

Event-BUS

Pub/Sub

Page 43: Event Driven Programming & Architecture

Minimal EventFramework

Eventname:String

payload:Object

Busemit(event)

addListener(eventName listener)،

ASenderAReceiver_2listen_1()listen_2()

AReceiver_1listen_1()listen_2()

Page 44: Event Driven Programming & Architecture

public class Event {

private String name;private Object payload;

public Event(String name, Object payload) {this.name = name;this.payload = payload;

}public Event(String name) {

this.name = name;}public String getName() {

return name;}public Object getPayload() {

return payload;}

}

Event (Java)

Page 45: Event Driven Programming & Architecture

public class ReceiverDemo implements EventListener {public void receive(Event event) {}

…}

EventBus bus = new EventBus();ReceiverDemo receiver1 = new ReceiverDemo();ReceiverDemo receiver2 = new ReceiverDemo();

bus.addListener("SomethingHappened", receiver1);bus.addListener("SomethingHappened", receiver2);bus.emit(new Event("SomethingHappened"));

Basics (Java)

Page 46: Event Driven Programming & Architecture

public class ReceiverDemo implements EventListener {public void receive(Event event) {}

…}

int payload = 27;EventBus bus = new EventBus();ReceiverDemo receiver1 = new ReceiverDemo();

bus.addListener("SomethingHappened", receiver1);bus.emit(new Event("SomethingHappened", payload));

Payload (Java)

Page 47: Event Driven Programming & Architecture

Basics (JS)

var callback1 = function() { … } var callback2 = function() { … } 

bus.addListener('SomethingHappened', callback1);bus.addListener('SomethingHappened', callback2);bus.emit('SomethingHappened');

Page 48: Event Driven Programming & Architecture

Payload (JS)

var callback = function(payload) { ...     });

bus.addListener('SomethingHappened', callback);    bus.emit('SomethingHappened', {bar: 'foo'});

Page 49: Event Driven Programming & Architecture

Tests/Specs

1) a_Bus_can_emit_Events

2) a_Receiver_gets_notified

3) multiple_Recivers_get_notified

4) Events_accept_a_Payload

Page 50: Event Driven Programming & Architecture

GO

Page 51: Event Driven Programming & Architecture

Callcenter Kata

Page 52: Event Driven Programming & Architecture

Constraints

no Method-communication, Events only

Page 53: Event Driven Programming & Architecture

Constraints

no Method-communication, Events only

Small Classes (SRP) max. 20-30 LOC max. 5 Methods