event driven programming & architecture
Post on 29-Jan-2018
43 Views
Preview:
TRANSCRIPT
https://www.flickr.com/photos/11319126@N00/8270409318/in/photostream
Microservices
http://martinfowler.com/articles/microservices.html
Hexagonal Architecture
DomainModel
Adapter Adapter
Adapte
rAdapter
Adapte
r
Adapter
Adapter
Persistance
Adapter
Hexagonal Architecture
DomainModel
Adapter Adapter
Adapte
rAdapter
Adapte
r
Adapter
Adapter
Persistance
Adapter
GUI
Hexagonal Architecture
DomainModel
Adapter Adapter
Adapte
rAdapter
Adapte
r
Adapter
Adapter
Persistance
Adapter
GUI
Events
Events
Events
Events
What do you mean by “Event-Driven”?
Martin Fowler
Event NotificationEvent-Carried State TransferEvent SourcingCQRS
https://martinfowler.com/articles/201701-event-driven.html
Method vs.
Event https://www.flickr.com/photos/gen/325927418
https://www.flickr.com/photos/caroslines/547184477
Wiring
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
Winner?https://www.flickr.com/photos/48424574@N07/5096035675
Pair-Programming
https://www.youtube.com/watch?v=8wUOUmeulNs © 2012 Atlassian
0911/123499040/456780171/3456789….
Phone Number / Caller ID
0911 Nürnberg
040 Hamburg
0911/123499….
040/45678….
0911/123499040/456780171/3456789….
Phone Number / Caller ID
0911 Nürnberg
0911/123499….
040/45678….
Statistik
040 Hamburg
callAgency
localCallcenter„Berlin“
030/12345
Incoming Call040/12345030/12345
...
localCallcenter„Hamburg“
040/12345
statistic
Pure OO
statistic
statistic
Event Frameworks
https://www.flickr.com/photos/alebaffa/8939535066
Minimal EventFramework
Eventname:String
payload:Object
Busemit(event)
addListener(eventName listener)،
ASenderAReceiver_2listen_1()listen_2()
AReceiver_1listen_1()listen_2()
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)
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)
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)
Basics (JS)
var callback1 = function() { … } var callback2 = function() { … }
bus.addListener('SomethingHappened', callback1);bus.addListener('SomethingHappened', callback2);bus.emit('SomethingHappened');
Payload (JS)
var callback = function(payload) { ... });
bus.addListener('SomethingHappened', callback); bus.emit('SomethingHappened', {bar: 'foo'});
Tests/Specs
1) a_Bus_can_emit_Events
2) a_Receiver_gets_notified
3) multiple_Recivers_get_notified
4) Events_accept_a_Payload
top related