Page 1
Jean-Pierre Dalbérahttps://www.flickr.com/photos/dalbera/https://www.flickr.com/photos/dalbera/11476371994/in/photolist-rjetrn-
Hexagonale Architektur in der Praxis
Artur Tomas
neuland - Büro für Informatik
XP Days Germany 2016
Foto: Jean-Pierre Dalbéra, https://www.flickr.com/photos/dalbera/11476371994
Page 2
Jean-Pierre Dalbérahttps://www.flickr.com/photos/dalbera/https://www.flickr.com/photos/dalbera/11476371994/in/photolist-rjetrn-
Artur Tomas
neuland Büro für Informatik, Bremen
DDD / Shop-Systeme
Java / Ruby (on Rails)
Page 3
Jean-Pierre Dalbérahttps://www.flickr.com/photos/dalbera/https://www.flickr.com/photos/dalbera/11476371994/in/photolist-rjetrn-
Disclaimer
Hexagonal Architecture / Ports&Adapters Alistair Cockburn, 2005
„Implementing Domain Driven Design“ Vaughn Vernon
Page 4
Kontext
OOP / Java
Web-Applikationen / E-Commerce
Jean-Pierre Dalbérahttps://www.flickr.com/photos/dalbera/https://www.flickr.com/photos/dalbera/11476371994/in/photolist-rjetrn-
Page 5
Schichten-ArchitekturFoto: Kate Hopkins, https://www.flickr.com/photos/accidentalhedonist/4809144050
Page 6
Schichten-Architektur
Etabliert
Intuitiv (Präsentation, Logik, Persistenz)
Page 7
Schichten-Architektur
Oben/Unten - Unterscheidung
Obere Schicht ist von der/den unteren abhängig
Page 8
Schichten-Architektur
Controller
Service Domain/Model Repository / DAO
Page 9
Schichten-Architektur
Problem: Fehlende Grenzen
Page 10
Schichten-Architektur
Fortspinnungstypus
Page 11
Schichten-Architektur
Interfaces
Page 12
Schichten-Architektur
Interfaces und ihre Implementierungin einem Package:
package de.myapp.persistenceProductRepository.java // interfaceProductRepositoryImpl.java // hier?
Page 13
Alistair Cockburn, 2005
Hexagonale Architektur
Jean-Pierre Dalbérahttps://www.flickr.com/photos/dalbera/
Page 14
Jean-Pierre Dalbérahttps://www.flickr.com/photos/dalbera/https://www.flickr.com/photos/dalbera/11476371994/in/photolist-rjetrn-
Hexagonale Architektur
3 Bereiche:
- Applikation / Domäne
- Primäre (aktive) Adapter
- Sekundäre (passive) Adapter
Page 15
Jean-Pierre Dalbérahttps://www.flickr.com/photos/dalbera/https://www.flickr.com/photos/dalbera/11476371994/in/photolist-rjetrn-
Hexagonale Architektur
Web-App Use-Case
Page 16
Jean-Pierre Dalbérahttps://www.flickr.com/photos/dalbera/https://www.flickr.com/photos/dalbera/11476371994/in/photolist-rjetrn-
Hexagonale Architektur
placeOrder-Request
Foto: Intel Free Press, https://www.flickr.com/photos/intelfreepress/7777276062
Page 17
Hexagonale Architektur
OrderController
Adapter (primär)Jean-Pierre Dalbéra
placeOrder
Page 18
Hexagonale Architektur
OrderController
Adapter (primär)Jean-Pierre Dalbéra
OrderApplicationService
Application-Services
placeOrder
Page 19
Hexagonale Architektur
OrderController
Adapter (primär)Jean-Pierre Dalbéra
OrderApplicationService
Application-Services
placeOrder
OrderListener
placeOrder
Page 20
Hexagonale Architektur
placeOrder
OrderController
Adapter (primary)Jean-Pierre Dalbéra
OrderApplicationService
Application-Services
findCart
CartRepository
Page 21
Hexagonale Architektur
placeOrder
OrderController
Adapter (primary)Jean-Pierre Dalbéra
OrderApplicationService
Application-Services
Adapter (secondary)
HibernateCartRepository
CartRepository
findCart
Interface
Page 22
Hexagonale Architektur
placeOrder
OrderController
Adapter (primary)Jean-Pierre Dalbéra
OrderApplicationService
Application-Services
Cart
Adapter (secondary)
HibernateCartRepository
CartRepository
Page 23
Hexagonale Architektur
placeOrder
OrderController
Adapter (primary)Jean-Pierre Dalbéra
OrderApplicationService
Application-Services
Product
Customer
Cart
Aggregate
Adapter (secondary)
HibernateCartRepository
CartRepository
Page 24
Hexagonale Architektur
placeOrder
OrderController
Adapter (primary)Jean-Pierre Dalbéra
OrderApplicationService
Application-Services
Product
Customer
Cart
Aggregate
Adapter (secondary)
HibernateCartRepository
CartRepository
Page 25
Hexagonale Architektur
placeOrder
OrderController
Adapter (primary)Jean-Pierre Dalbéra
OrderApplicationService
Application-Services
Product
Customer
Cart
Aggregate
Adapter (secondary)
HibernateCartRepository
CartRepository
OrderRepository
Page 26
Hexagonale Architektur
placeOrder
OrderController
Adapter (primary)Jean-Pierre Dalbéra
OrderApplicationService
Application-Services
Product
Customer
Cart
Aggregate
Adapter (secondary)
HibernateCartRepository
CartRepository
OrderRepository
HibernateOrderRepository
Page 27
Hexagonale Architektur
placeOrder
OrderController
Adapter (primary)Jean-Pierre Dalbéra
OrderApplicationService
Application-Services
Product
Customer
Cart
Aggregate
Adapter (secondary)
HibernateCartRepository
CartRepository
OrderRepository
HibernateOrderRepository
Page 28
Hexagonale Architektur
Jean-Pierre Dalbéra
Adapter (secondary)
Konkret (Implementierung)
Abstrakt (Interface)
HibernateCartRepository
CartRepository
Entkopplung!
Page 29
Hexagonale Architektur
Jean-Pierre Dalbéra
Adapter (secondary)
Konkret (Implementierung)
CsvFileCartRepository
HibernateCartRepository
Abstrakt (Interface) CartRepository
Page 30
Hexagonale Architektur
Jean-Pierre Dalbéra
Adapter (secondary)
HibernateCartRepository
CartRepository
Cart: DB Objekt
Page 31
Hexagonale Architektur
Jean-Pierre Dalbéra
Adapter (secondary)
HibernateCartRepository
CartRepository
Cart: DB Objekt
Cart
Cart: Domain ObjektCart: Persistence
Page 32
Jean-Pierre Dalbérahttps://www.flickr.com/photos/dalbera/https://www.flickr.com/photos/dalbera/11476371994/in/photolist-rjetrn-
Hexagonale Architektur
Applikation / Domäne entkoppelt von allen Adaptern!
Page 33
Jean-Pierre Dalbérahttps://www.flickr.com/photos/dalbera/https://www.flickr.com/photos/dalbera/11476371994/in/photolist-rjetrn-
Hexagonale Architektur
Größe eines Hexagons?
Page 34
Jean-Pierre Dalbérahttps://www.flickr.com/photos/dalbera/https://www.flickr.com/photos/dalbera/11476371994/in/photolist-rjetrn-
Hexagonale Architektur
Größe eines Hexagons: -> 1 Subdomäne (DDD)
entspricht in der Umsetzung: -> 1 Bounded Context
Page 35
Jean-Pierre Dalbérahttps://www.flickr.com/photos/dalbera/https://www.flickr.com/photos/dalbera/11476371994/in/photolist-rjetrn-
Hexagonale Architektur
Kommunikation mit externen Systemen?
Page 36
Jean-Pierre Dalbérahttps://www.flickr.com/photos/dalbera/https://www.flickr.com/photos/dalbera/11476371994/in/photolist-rjetrn-
Hexagonale Architektur
Kommunikation mit externen Systemen?
-> Eigene DB, MQ, Mail … -> Adapter
Page 37
Jean-Pierre Dalbérahttps://www.flickr.com/photos/dalbera/https://www.flickr.com/photos/dalbera/11476371994/in/photolist-rjetrn-
Hexagonale Architektur
Kommunikation mit anderen Systemen?
1 Hexagone 2 Fremde Services, Applikationen
-> Domain-Services
Page 38
Jean-Pierre Dalbérahttps://www.flickr.com/photos/dalbera/https://www.flickr.com/photos/dalbera/11476371994/in/photolist-rjetrn-
Hexagonale Architektur
Legacy-Systeme
Page 39
Jean-Pierre Dalbérahttps://www.flickr.com/photos/dalbera/https://www.flickr.com/photos/dalbera/11476371994/in/photolist-rjetrn-
Hexagonale Architektur
Legacy-Systeme:
-> Fortsetzung -> Refactoring/Migration -> Ablösung
Page 40
Jean-Pierre Dalbérahttps://www.flickr.com/photos/dalbera/https://www.flickr.com/photos/dalbera/11476371994/in/photolist-rjetrn-
Hexagonale Architektur
Hexagon im Legacy-System?
-> Refactoring/Migration
Page 41
Jean-Pierre Dalbérahttps://www.flickr.com/photos/dalbera/https://www.flickr.com/photos/dalbera/11476371994/in/photolist-rjetrn-
Hexagonale Architektur
Hexagon im Legacy-System?
-> Subdomänen
Page 42
Jean-Pierre Dalbérahttps://www.flickr.com/photos/dalbera/https://www.flickr.com/photos/dalbera/11476371994/in/photolist-rjetrn-
Hexagonale Architektur
Hexagon im Legacy-System? Beispiel Web-Shop:
-> Suche -> Produkt -> Bestellweg -> „Mein Konto“
Page 43
Jean-Pierre Dalbérahttps://www.flickr.com/photos/dalbera/https://www.flickr.com/photos/dalbera/11476371994/in/photolist-rjetrn-
Hexagonale Architektur
Microservice mit Hexagon?
Page 44
Jean-Pierre Dalbérahttps://www.flickr.com/photos/dalbera/https://www.flickr.com/photos/dalbera/11476371994/in/photolist-rjetrn-
Hexagonale Architektur
Microservice - Größe?
Page 45
Jean-Pierre Dalbérahttps://www.flickr.com/photos/dalbera/https://www.flickr.com/photos/dalbera/11476371994/in/photolist-rjetrn-
Hexagonale Architektur
Subdomäne -> Bounded Context
Page 46
Jean-Pierre Dalbérahttps://www.flickr.com/photos/dalbera/https://www.flickr.com/photos/dalbera/11476371994/in/photolist-rjetrn-
Hexagonale Architektur
Microservice mit Hexagon?
-> JA, falls Subdomäne
Page 47
Jean-Pierre Dalbérahttps://www.flickr.com/photos/dalbera/https://www.flickr.com/photos/dalbera/11476371994/in/photolist-rjetrn-
Vielen Dank!