SlideShare a Scribd company logo
Hexagonal
Architecture
& Beyond
Thomas PIERRAIN
(use case driven)
@tpierrain
Hexagonal
Architecture
& Beyond
building software since 25 years
eXtreme Programmer now dealing with people after
12 years of architecture and change management
currently VP of Engineering @ Agicap in Lyon (scale up)
XP, TDD, DDD, Event Sourcing,
Tech architecture, Reactive Programming
DDD FR organizer
Thomas PIERRAIN (use case driven)
MENU
1.ORIGINAL
PATTERN
2. ALTERNATE
TAKES
(DDD FRIENDLY)
MENU
2. ALTERNATE
TAKES
(DDD FRIENDLY)
1.ORIGINAL
PATTERN
HEXAGONAL ARCHITECTURE: ORIGINS
• SMALLTALK PROJECT (MID 90s): To be able
to work 2 weeks without the database
• WEATHER WARNING SYSTEM: To be able to
connect to multiple external systems (http,
telemetry, phone, RSS, db) without changing the
whole software every time
Alistair
Cockburn
HEXAGONAL ARCHITECTURE:
ONE PATTERN TO…
Alistair
Cockburn
HEXAGONAL ARCHITECTURE:
ACTUALLY, ONE PATTERN TO…
• Easily switch one technology with another without breaking our core
domain code (like plug-ins)
• Easily develop and test an application in isolation from its eventual run-
time devices and databases
• Have good time to market and fast feedbacks about what is really at stakes
for our users
Alistair
Cockburn
2 ZONES
DOMAIN
INFRA
COMMUNICATING VIA…
DOMAIN
PORTS & ADAPTERS
PORTS IN THE
DOMAIN
DOMAIN
INFRASTRUCTURE
(in proc)
PORTS & ADAPTERS
PORTS IN THE
DOMAIN
ADAPTERS IN
THE INFRA
DEPENDENCIES ALWAYS TOWARDS THE INSIDE
DOMAIN
DEPENDENCY INVERSION PRINCIPLE
A.K.A. CONFIGURABLE DEPENDENCIES
INFRA
DEEPLY ASYMMETRICAL
LEFT-SIDE
(PRIMARY)
(DRIVER)
RIGHT-SIDE
(SECONDARY)
(DRIVEN)
👻
USER
DATA STORES
EXTERNAL
SYSTEMS
APIS
“implements”
DOMAIN
INFRASTRUCTURE
« uses »
DEEPLY ASYMMETRICAL
LEFT-SIDE PORTS
« uses »
« uses »
“use”
RIGHT-SIDE ADAPTERS
RIGHT-SIDE PORTS
“implemented by”
“implements”
DOMAIN
INFRASTRUCTURE
« uses »
DEEPLY ASYMMETRICAL
LEFT-SIDE PORTS
TO ENTER OUR DOMAIN
LEFT-SIDE ADAPTERS
TRANSLATE
TECH TO DOMAIN
RIGHT-SIDE ADAPTERS
TRANSLATE DOMAIN TO
TECH
RIGHT-SIDE PORTS FOR
OUR DOMAIN TO
INTERACT WITH OTHERS
« uses »
« uses »
“use”
“implemented by”
PORTS ARE CONTRACTS
LEFT-SIDE PORTS
ARE DOMAIN-
DRIVEN
CONTRACTS FOR
OTHERS TO
INTERACT WITH US
DOMAIN
INFRASTRUCTURE
« uses »
RIGHT-SIDE PORTS
ARE DOMAIN-
DRIVEN
CONTRACTS FOR
US TO ASK
SOMETHING TO
SOMEONE ELSE
HEXAGONAL “MICRO” SERVICES
@tpierrain (use case driven)
AUDITORIUM
SEATINGS API
SEAT SUGGESTIONS DOMAIN
INFRASTRUCTURE
HTTP
SUGGESTIONS
DB
SEAT SUGGESTIONS API
(in proc)
HTTP
HEXAGONAL ARCHITECTURE
IN MOTION
OUR DOMAIN
SUGGESTING SEATS IN THEATERS
“What seats can you suggest for 3
people wishing to attend the show Z?”
SEATS SUGGESTIONS API
SUGGESTING SEATS IN THEATERS
“What seats can you suggest for 3
people wishing to attend the show Z?”
AUDITORIUM SEATING
API
“I need the
auditorium seating
of show Z”
SEATS SUGGESTIONS API
SUGGESTING SEATS IN THEATERS
“What seats can you suggest for 3
people wishing to attend the show Z?”
AUDITORIUM SEATING
API
“I need the
auditorium seating
of show Z”
SEATS SUGGESTIONS API
SUGGESTING SEATS IN THEATERS
“What seats can you suggest for 3
people wishing to attend the show Z?”
AUDITORIUM SEATING
API
“I need the
auditorium seating
of show Z”
SEATS SUGGESTIONS API
SUGGESTING SEATS IN THEATERS
“What seats can you suggest for 3
people wishing to attend the show Z?”
AUDITORIUM SEATING
API
SEATS AVAILABILITY
API
“I need the
auditorium seating
of show Z”
SEATS SUGGESTIONS API
“I also need to know
which seats are
already reserved for
show Z”
SUGGESTING SEATS IN THEATERS
“What seats can you suggest for 3
people wishing to attend the show Z?”
AUDITORIUM SEATING
API
SEATS AVAILABILITY
API
“I need the
auditorium seating
of show Z”
SEATS SUGGESTIONS API
“I also need to know
which seats are
already reserved for
show Z”
SUGGESTING SEATS IN THEATERS
“What seats can you suggest for 3
people wishing to attend the show Z?”
AUDITORIUM SEATING
API
SEATS AVAILABILITY
API
“I need the
auditorium seating
of show Z”
SEATS SUGGESTIONS API
“I also need to know
which seats are
already reserved for
show Z”
OUR CORE DOMAIN
SUGGESTING SEATS IN THEATERS
“What seats can you suggest for 3
people wishing to attend the show Z?”
AUDITORIUM SEATING
API
SEATS AVAILABILITY
API
“I need the
auditorium seating
of show Z”
SEATS SUGGESTIONS API
“I also need to know
which seats are
already reserved for
show Z”
SUGGESTING SEATS IN THEATERS
“What seats can you suggest for 3
people wishing to attend the show Z?”
AUDITORIUM SEATING
API
SEATS AVAILABILITY
API
“I need the
auditorium seating
of show Z”
SEATS SUGGESTIONS API
“I also need to know
which seats are
already reserved for
show Z”
“Ok. You can have seats
A1, A2, A3 in pricing tier 1,
C4, C5, C6 in pricing tier 2
…”
SUGGESTING SEATS IN THEATERS
“What seats can you suggest for 3
people wishing to attend the show Z?”
AUDITORIUM SEATING
API
SEATS AVAILABILITY
API
“I need the
auditorium seating
of show Z”
SEATS SUGGESTIONS API
“I also need to know
which seats are
already reserved for
show Z”
“Ok. You can have seats
A1, A2, A3 in pricing tier 1,
C4, C5, C6 in pricing tier 2
…”
SUGGESTING SEATS IN THEATERS
“What seats can you suggest for 3
people wishing to attend the show Z?”
LET’S SEE SOME CODE
HEXAGONAL ARCHITECTURE
MAIN CHALLENGES
• UNDERSTAND THE LEFT/RIGHT ASYMMETRY
• PORTS SHOULD “EXPRESS” DOMAIN CONCEPTS ONLY
• TESTS ARE KIND OF ADAPTERS
MENU
1.ORIGINAL
PATTERN
2. ALTERNATE
TAKES
(DDD FRIENDLY)
2. ORIGINAL
PATTERN
MENU
2. ALTERNATE
TAKES
(DDD FRIENDLY)
OTHER INTENTS #1
• To properly split and protect our domain code from the infrastructure
one
community
OTHER INTENTS #2
• To reduce layering and complexity of our “baklava” architectures
community
OTHER INTENTS #3
• To postpone architecture decision at the right time (when we
understand the domain & our constraints)
community
OTHER INTENTS #4
• To modularize a monolith and get ready for a physical split among
various components/apis/μ services
community
AUDITORIUM
LAYOUTS DOMAIN
INFRA
DB
THE HIVE - MODULAR MONOLITH WITH “HEXAGONS” INSIDE
AUDITORIUM
SEATINGS DOMAIN
INFRA
DB
REPOSITORY
(ADAPTER)
SEATS AVAILABILITY
DOMAIN
INFRA
DB
In-Proc
@tpierrain (use case driven) 2.2
SEAT SUGGESTIONS DOMAIN
DB
INFRA
HTTP
In-Proc
In-Proc
SUGGESTI0NS
WEBCONTROLLER
(ADAPTER)
AUDITORIUMSEATINGS
WEBCONTROLLER
(ADAPTER)
INFRA
HTTP
The whole hexagons are
assembled in the same
process.
We are using
“lightweight” & In-Proc
driven adapters that are
making direct memory
calls towards other
hexagons' driver ports
(i.e. driven adapters
calling someone else’s
driver ports).
Modularized monoliths
are very handy for any
refactoring phase.
AUDITORIUM
LAYOUTS DOMAIN
INFRA
DB
SEAT SUGGESTIONS DOMAIN
INFRASTRUCTURE
HTTP
THE SPLIT - “MICRO” SERVICES POWERED BY HEXAGONAL ARCHITECTURE
DB
SEAT SUGGESTIONS API
@tpierrain (use case driven)
AUDITORIUM
SEATING DOMAIN
INFRA
DB
REPO
(ADAPTER)
SEATS AVAILABILITY
DOMAIN
INFRA
DB
HTTP
HTTP
HTTP
(in proc)
The next step after a monolith modularization is often to split the various hexagons into dedicated services/APIs.
But beware of the Distributed Monolith pitfall occurring very often when the services/APIs aren’t aligned with (sub) domain
concerns (see. Bounded Contexts from DDD).
IProvideUpToDateAuditoriumSeatings
(driven port)
OTHER INTENTS #5
• To adapt not only technologies but also external domain models
community
AUDITORIUM
LAYOUTS DOMAIN
INFRA
DB
SEAT SUGGESTIONS DOMAIN
INFRASTRUCTURE
HTTP
HEXAGONAL “HACKED” WITH AN ANTI-CORRUPTION LAYER (ACL) ADAPTER
DB
SEAT SUGGESTIONS API
@tpierrain (use case driven)
SEATS AVAILABILITY
DOMAIN
INFRA
DB
HTTP
HTTP
(in proc)
DB
The AuditoriumSeatings ACL (in green) exposes us ready-to-use Auditorium Seatings for shows. It assembles them from various
external sources/APIs. An Auditorium Seating is the Auditorium Layout for a show, with indications about every current seat
availability.
Interesting option/trade-off when we don’t want to couple our real core domain (i.e. to suggest the best possible seats for
groups of people) with how to infer Auditorium Seatings from various external sources and models.
More about it (Hexagonal or not Hexagonal?) : https://tpierrain.blogspot.com/2020/11/hexagonal-or-not-hexagonal.html
Provides Auditorium layout (Topology)
for a show, but with no information
about seats availabilities
Provides list of already
reserved seats for a show
IProvideUpToDateAuditoriumSeatings
(driven port)
AUDITORIUM
LAYOUTS DOMAIN
INFRA
DB
SEAT SUGGESTIONS DOMAIN
INFRASTRUCTURE
HTTP
THE SPLIT - “MICRO” SERVICES POWERED BY HEXAGONAL ARCHITECTURE
DB
SEAT SUGGESTIONS API
@tpierrain (use case driven)
AUDITORIUM
SEATING DOMAIN
INFRA
DB
REPO
(ADAPTER)
SEATS AVAILABILITY
DOMAIN
INFRA
DB
HTTP
HTTP
HTTP
(in proc)
The next step after a monolith modularization is often to split the various hexagons into dedicated services/APIs.
But beware of the Distributed Monolith pitfall occurring very often when the services/APIs aren’t aligned with (sub) domain
concerns (see. Bounded Contexts from DDD).
IProvideUpToDateAuditoriumSeatings
(driven port)
HEXAGONAL OR NOT HEXAGONAL?
YES?
An Adapter can be an ACL
I may not want my domain to be
polluted by external models or
upstream organizational changes
NO?
I want to stick to Alistair original
motivations (i.e. technological)
 port = only to swap technology
HEXAGONAL OR NOT HEXAGONAL?
AND THIS ONE?
Note: an external API is often a
former module extracted from a
modular monolith
Auditorium
Seating API
HTTP
HTTP
HEXAGONAL ARCHITECTURE: ONE PATTERN,
MULTIPLE FACETS?
• The technological facet: to easily switch one technology with another
without breaking our core domain code (like plug-ins)
• The testability facet: to easily develop and test an application in isolation
from its eventual run-time devices and databases
• The fast feedback facet: to have good time to market and fast feedbacks
about what is really at stakes for our users
• The tactical DDD facet: to properly split and protect our domain code from the infrastructure one
• The simplicity facet: to reduce layering and complexity of our architectures
• The late architectural decisions facet: to postpone architectural decisions at the right time
• The strategic DDD facet: to adapt not only technologies but also external domain models
• The Refactoring hive facet: to modularize a monolith splitting every Bounded Context into a
hexagon
Community
SO…
HEXAGONAL OR NOT HEXAGONAL?
YES ?
It’s a multi-facets pattern!
o The technological facet
o The testability facet
o The tactical DDD facet
o The simplicity facet
o The quick feedback facet
o The late architectural
decisions facet
o The strategic DDD facet
http://tpierrain.blogspot.com/2020/11/hexagonal-or-not-hexagonal.html
HEXAGONAL OR NOT HEXAGONAL?
LOOKS LIKE…
…WE NEED TO FIND NEW
NAMES FOR ALL OUR USAGES
AS A COMMUNITY
THANK YOU!
QUESTIONS?

More Related Content

What's hot

Clean architecture
Clean architectureClean architecture
Clean architecture
Lieven Doclo
 
YOW London - Considering Migrating a Monolith to Microservices? A Dark Energy...
YOW London - Considering Migrating a Monolith to Microservices? A Dark Energy...YOW London - Considering Migrating a Monolith to Microservices? A Dark Energy...
YOW London - Considering Migrating a Monolith to Microservices? A Dark Energy...
Chris Richardson
 
Micro services Architecture
Micro services ArchitectureMicro services Architecture
Micro services Architecture
Araf Karsh Hamid
 
Domain Driven Design
Domain Driven Design Domain Driven Design
Domain Driven Design
Araf Karsh Hamid
 
ITkonekt 2019 | Robert C. Martin (Uncle Bob), Clean Architecture and Design
ITkonekt 2019 | Robert C. Martin (Uncle Bob), Clean Architecture and DesignITkonekt 2019 | Robert C. Martin (Uncle Bob), Clean Architecture and Design
ITkonekt 2019 | Robert C. Martin (Uncle Bob), Clean Architecture and Design
ErginBilgin3
 
More the merrier: a microservices anti-pattern
More the merrier: a microservices anti-patternMore the merrier: a microservices anti-pattern
More the merrier: a microservices anti-pattern
Chris Richardson
 
Clean architecture
Clean architectureClean architecture
Clean architecture
.NET Crowd
 
도메인 주도 설계의 본질
도메인 주도 설계의 본질도메인 주도 설계의 본질
도메인 주도 설계의 본질
Young-Ho Cho
 
Microservices Architecture - Bangkok 2018
Microservices Architecture - Bangkok 2018Microservices Architecture - Bangkok 2018
Microservices Architecture - Bangkok 2018
Araf Karsh Hamid
 
A Pattern Language for Microservices
A Pattern Language for MicroservicesA Pattern Language for Microservices
A Pattern Language for Microservices
Chris Richardson
 
DevOps Transformation at Dynatrace and with Dynatrace
DevOps Transformation at Dynatrace and with DynatraceDevOps Transformation at Dynatrace and with Dynatrace
DevOps Transformation at Dynatrace and with Dynatrace
Andreas Grabner
 
Transactions redefined
Transactions redefinedTransactions redefined
Transactions redefined
Alberto Brandolini
 
Elastic-Engineering
Elastic-EngineeringElastic-Engineering
Elastic-Engineering
Araf Karsh Hamid
 
Introduction to Microservices
Introduction to MicroservicesIntroduction to Microservices
Introduction to Microservices
Amazon Web Services
 
Event storming recipes
Event storming recipesEvent storming recipes
Event storming recipes
Alberto Brandolini
 
50.000 orange stickies later
50.000 orange stickies later50.000 orange stickies later
50.000 orange stickies later
Alberto Brandolini
 
Microservices, DevOps & SRE
Microservices, DevOps & SREMicroservices, DevOps & SRE
Microservices, DevOps & SRE
Araf Karsh Hamid
 
Microservices, Containers, Kubernetes, Kafka, Kanban
Microservices, Containers, Kubernetes, Kafka, KanbanMicroservices, Containers, Kubernetes, Kafka, Kanban
Microservices, Containers, Kubernetes, Kafka, Kanban
Araf Karsh Hamid
 
Jfrog artifactory artifact management c tamilmaran presentation - copy
Jfrog artifactory artifact management c tamilmaran presentation - copyJfrog artifactory artifact management c tamilmaran presentation - copy
Jfrog artifactory artifact management c tamilmaran presentation - copy
TAMILMARAN C
 
Introduction to Microservices
Introduction to MicroservicesIntroduction to Microservices
Introduction to Microservices
Roger van de Kimmenade
 

What's hot (20)

Clean architecture
Clean architectureClean architecture
Clean architecture
 
YOW London - Considering Migrating a Monolith to Microservices? A Dark Energy...
YOW London - Considering Migrating a Monolith to Microservices? A Dark Energy...YOW London - Considering Migrating a Monolith to Microservices? A Dark Energy...
YOW London - Considering Migrating a Monolith to Microservices? A Dark Energy...
 
Micro services Architecture
Micro services ArchitectureMicro services Architecture
Micro services Architecture
 
Domain Driven Design
Domain Driven Design Domain Driven Design
Domain Driven Design
 
ITkonekt 2019 | Robert C. Martin (Uncle Bob), Clean Architecture and Design
ITkonekt 2019 | Robert C. Martin (Uncle Bob), Clean Architecture and DesignITkonekt 2019 | Robert C. Martin (Uncle Bob), Clean Architecture and Design
ITkonekt 2019 | Robert C. Martin (Uncle Bob), Clean Architecture and Design
 
More the merrier: a microservices anti-pattern
More the merrier: a microservices anti-patternMore the merrier: a microservices anti-pattern
More the merrier: a microservices anti-pattern
 
Clean architecture
Clean architectureClean architecture
Clean architecture
 
도메인 주도 설계의 본질
도메인 주도 설계의 본질도메인 주도 설계의 본질
도메인 주도 설계의 본질
 
Microservices Architecture - Bangkok 2018
Microservices Architecture - Bangkok 2018Microservices Architecture - Bangkok 2018
Microservices Architecture - Bangkok 2018
 
A Pattern Language for Microservices
A Pattern Language for MicroservicesA Pattern Language for Microservices
A Pattern Language for Microservices
 
DevOps Transformation at Dynatrace and with Dynatrace
DevOps Transformation at Dynatrace and with DynatraceDevOps Transformation at Dynatrace and with Dynatrace
DevOps Transformation at Dynatrace and with Dynatrace
 
Transactions redefined
Transactions redefinedTransactions redefined
Transactions redefined
 
Elastic-Engineering
Elastic-EngineeringElastic-Engineering
Elastic-Engineering
 
Introduction to Microservices
Introduction to MicroservicesIntroduction to Microservices
Introduction to Microservices
 
Event storming recipes
Event storming recipesEvent storming recipes
Event storming recipes
 
50.000 orange stickies later
50.000 orange stickies later50.000 orange stickies later
50.000 orange stickies later
 
Microservices, DevOps & SRE
Microservices, DevOps & SREMicroservices, DevOps & SRE
Microservices, DevOps & SRE
 
Microservices, Containers, Kubernetes, Kafka, Kanban
Microservices, Containers, Kubernetes, Kafka, KanbanMicroservices, Containers, Kubernetes, Kafka, Kanban
Microservices, Containers, Kubernetes, Kafka, Kanban
 
Jfrog artifactory artifact management c tamilmaran presentation - copy
Jfrog artifactory artifact management c tamilmaran presentation - copyJfrog artifactory artifact management c tamilmaran presentation - copy
Jfrog artifactory artifact management c tamilmaran presentation - copy
 
Introduction to Microservices
Introduction to MicroservicesIntroduction to Microservices
Introduction to Microservices
 

Similar to Hexagonal And Beyond

Beyond Hexagonal architecture
Beyond Hexagonal architectureBeyond Hexagonal architecture
Beyond Hexagonal architecture
Thomas Pierrain
 
Hexagonal architecture vs Functional core / Imperative shell
Hexagonal architecture vs Functional core / Imperative shellHexagonal architecture vs Functional core / Imperative shell
Hexagonal architecture vs Functional core / Imperative shell
Thomas Pierrain
 
Continuous Integration and Deployment Best Practices on AWS
Continuous Integration and Deployment Best Practices on AWSContinuous Integration and Deployment Best Practices on AWS
Continuous Integration and Deployment Best Practices on AWS
Danilo Poccia
 
Juraj vysvader - Python developer's CV
Juraj vysvader - Python developer's CVJuraj vysvader - Python developer's CV
Juraj vysvader - Python developer's CV
Juraj Vysvader
 
ABD322_Implementing a Flight Simulator Interface Using AI, Virtual Reality, a...
ABD322_Implementing a Flight Simulator Interface Using AI, Virtual Reality, a...ABD322_Implementing a Flight Simulator Interface Using AI, Virtual Reality, a...
ABD322_Implementing a Flight Simulator Interface Using AI, Virtual Reality, a...
Amazon Web Services
 
Red hat ansible automation technical deck
Red hat ansible automation technical deckRed hat ansible automation technical deck
Red hat ansible automation technical deck
Juraj Hantak
 
AWS Summit Nordics - Media and Gaming Application on AWS
AWS Summit Nordics - Media and Gaming Application on AWSAWS Summit Nordics - Media and Gaming Application on AWS
AWS Summit Nordics - Media and Gaming Application on AWSAmazon Web Services
 
Where Node.JS Meets iOS
Where Node.JS Meets iOSWhere Node.JS Meets iOS
Where Node.JS Meets iOS
Sam Rijs
 
Building Event Driven (Micro)services with Apache Kafka
Building Event Driven (Micro)services with Apache KafkaBuilding Event Driven (Micro)services with Apache Kafka
Building Event Driven (Micro)services with Apache Kafka
Guido Schmutz
 
Hypertrace - Distributed Tracing and Observability for Microservices
Hypertrace - Distributed Tracing and Observability for MicroservicesHypertrace - Distributed Tracing and Observability for Microservices
Hypertrace - Distributed Tracing and Observability for Microservices
Buchi Reddy Busi Reddy
 
ICSE 2022 SEIP: Toward Among-Device AI from On-Device AI with Stream Pipelines
ICSE 2022 SEIP: Toward Among-Device AI from On-Device AI with Stream PipelinesICSE 2022 SEIP: Toward Among-Device AI from On-Device AI with Stream Pipelines
ICSE 2022 SEIP: Toward Among-Device AI from On-Device AI with Stream Pipelines
MyungJoo Ham
 
Run Code, Not Servers: AWS Lambda
Run Code, Not Servers: AWS LambdaRun Code, Not Servers: AWS Lambda
Run Code, Not Servers: AWS Lambda
Özgür Çiçek
 
Multi-container Applications on OpenShift with Ansible Service Broker
Multi-container Applications on OpenShift with Ansible Service BrokerMulti-container Applications on OpenShift with Ansible Service Broker
Multi-container Applications on OpenShift with Ansible Service Broker
Amazon Web Services
 
SIPLABS - Hard Rocking Kazoo - KazooCon 2015
SIPLABS - Hard Rocking Kazoo - KazooCon 2015SIPLABS - Hard Rocking Kazoo - KazooCon 2015
SIPLABS - Hard Rocking Kazoo - KazooCon 2015
2600Hz
 
Dystopia as a Service
Dystopia as a ServiceDystopia as a Service
Dystopia as a Service
Adrian Cockcroft
 
CMG2013 Workshop: Netflix Cloud Native, Capacity, Performance and Cost Optimi...
CMG2013 Workshop: Netflix Cloud Native, Capacity, Performance and Cost Optimi...CMG2013 Workshop: Netflix Cloud Native, Capacity, Performance and Cost Optimi...
CMG2013 Workshop: Netflix Cloud Native, Capacity, Performance and Cost Optimi...
Adrian Cockcroft
 
IVS CTO Night And Day 2018 Winter - AWS Startup Tech Office Hours
IVS CTO Night And Day 2018 Winter - AWS Startup Tech Office HoursIVS CTO Night And Day 2018 Winter - AWS Startup Tech Office Hours
IVS CTO Night And Day 2018 Winter - AWS Startup Tech Office Hours
Amazon Web Services Japan
 
Kubecon SIG Apps December 2017 Update
Kubecon SIG Apps December 2017 UpdateKubecon SIG Apps December 2017 Update
Kubecon SIG Apps December 2017 Update
Matthew Farina
 
Stups.io - an Open Source Cloud Framework for AWS
Stups.io - an Open Source Cloud Framework for AWSStups.io - an Open Source Cloud Framework for AWS
Stups.io - an Open Source Cloud Framework for AWS
Jan Löffler
 
Netflix Play API: Why we built an evolutionary architecture
Netflix Play API: Why we built an evolutionary architectureNetflix Play API: Why we built an evolutionary architecture
Netflix Play API: Why we built an evolutionary architecture
Suudhan Rangarajan
 

Similar to Hexagonal And Beyond (20)

Beyond Hexagonal architecture
Beyond Hexagonal architectureBeyond Hexagonal architecture
Beyond Hexagonal architecture
 
Hexagonal architecture vs Functional core / Imperative shell
Hexagonal architecture vs Functional core / Imperative shellHexagonal architecture vs Functional core / Imperative shell
Hexagonal architecture vs Functional core / Imperative shell
 
Continuous Integration and Deployment Best Practices on AWS
Continuous Integration and Deployment Best Practices on AWSContinuous Integration and Deployment Best Practices on AWS
Continuous Integration and Deployment Best Practices on AWS
 
Juraj vysvader - Python developer's CV
Juraj vysvader - Python developer's CVJuraj vysvader - Python developer's CV
Juraj vysvader - Python developer's CV
 
ABD322_Implementing a Flight Simulator Interface Using AI, Virtual Reality, a...
ABD322_Implementing a Flight Simulator Interface Using AI, Virtual Reality, a...ABD322_Implementing a Flight Simulator Interface Using AI, Virtual Reality, a...
ABD322_Implementing a Flight Simulator Interface Using AI, Virtual Reality, a...
 
Red hat ansible automation technical deck
Red hat ansible automation technical deckRed hat ansible automation technical deck
Red hat ansible automation technical deck
 
AWS Summit Nordics - Media and Gaming Application on AWS
AWS Summit Nordics - Media and Gaming Application on AWSAWS Summit Nordics - Media and Gaming Application on AWS
AWS Summit Nordics - Media and Gaming Application on AWS
 
Where Node.JS Meets iOS
Where Node.JS Meets iOSWhere Node.JS Meets iOS
Where Node.JS Meets iOS
 
Building Event Driven (Micro)services with Apache Kafka
Building Event Driven (Micro)services with Apache KafkaBuilding Event Driven (Micro)services with Apache Kafka
Building Event Driven (Micro)services with Apache Kafka
 
Hypertrace - Distributed Tracing and Observability for Microservices
Hypertrace - Distributed Tracing and Observability for MicroservicesHypertrace - Distributed Tracing and Observability for Microservices
Hypertrace - Distributed Tracing and Observability for Microservices
 
ICSE 2022 SEIP: Toward Among-Device AI from On-Device AI with Stream Pipelines
ICSE 2022 SEIP: Toward Among-Device AI from On-Device AI with Stream PipelinesICSE 2022 SEIP: Toward Among-Device AI from On-Device AI with Stream Pipelines
ICSE 2022 SEIP: Toward Among-Device AI from On-Device AI with Stream Pipelines
 
Run Code, Not Servers: AWS Lambda
Run Code, Not Servers: AWS LambdaRun Code, Not Servers: AWS Lambda
Run Code, Not Servers: AWS Lambda
 
Multi-container Applications on OpenShift with Ansible Service Broker
Multi-container Applications on OpenShift with Ansible Service BrokerMulti-container Applications on OpenShift with Ansible Service Broker
Multi-container Applications on OpenShift with Ansible Service Broker
 
SIPLABS - Hard Rocking Kazoo - KazooCon 2015
SIPLABS - Hard Rocking Kazoo - KazooCon 2015SIPLABS - Hard Rocking Kazoo - KazooCon 2015
SIPLABS - Hard Rocking Kazoo - KazooCon 2015
 
Dystopia as a Service
Dystopia as a ServiceDystopia as a Service
Dystopia as a Service
 
CMG2013 Workshop: Netflix Cloud Native, Capacity, Performance and Cost Optimi...
CMG2013 Workshop: Netflix Cloud Native, Capacity, Performance and Cost Optimi...CMG2013 Workshop: Netflix Cloud Native, Capacity, Performance and Cost Optimi...
CMG2013 Workshop: Netflix Cloud Native, Capacity, Performance and Cost Optimi...
 
IVS CTO Night And Day 2018 Winter - AWS Startup Tech Office Hours
IVS CTO Night And Day 2018 Winter - AWS Startup Tech Office HoursIVS CTO Night And Day 2018 Winter - AWS Startup Tech Office Hours
IVS CTO Night And Day 2018 Winter - AWS Startup Tech Office Hours
 
Kubecon SIG Apps December 2017 Update
Kubecon SIG Apps December 2017 UpdateKubecon SIG Apps December 2017 Update
Kubecon SIG Apps December 2017 Update
 
Stups.io - an Open Source Cloud Framework for AWS
Stups.io - an Open Source Cloud Framework for AWSStups.io - an Open Source Cloud Framework for AWS
Stups.io - an Open Source Cloud Framework for AWS
 
Netflix Play API: Why we built an evolutionary architecture
Netflix Play API: Why we built an evolutionary architectureNetflix Play API: Why we built an evolutionary architecture
Netflix Play API: Why we built an evolutionary architecture
 

More from Thomas Pierrain

The scale-up, the autonomy and the nuclear submarine
The scale-up, the autonomy and the nuclear submarineThe scale-up, the autonomy and the nuclear submarine
The scale-up, the autonomy and the nuclear submarine
Thomas Pierrain
 
La scale-up, l'autonomie et le sous-marin nucléaire
La scale-up, l'autonomie et le sous-marin nucléaireLa scale-up, l'autonomie et le sous-marin nucléaire
La scale-up, l'autonomie et le sous-marin nucléaire
Thomas Pierrain
 
De l'autre côté du miroir
De l'autre côté du miroirDe l'autre côté du miroir
De l'autre côté du miroir
Thomas Pierrain
 
eXtreme
eXtremeeXtreme
Write Antifragile & Domain-Driven tests with ”Outside-in diamond” ◆ TDD
Write Antifragile & Domain-Driven tests with ”Outside-in diamond” ◆ TDDWrite Antifragile & Domain-Driven tests with ”Outside-in diamond” ◆ TDD
Write Antifragile & Domain-Driven tests with ”Outside-in diamond” ◆ TDD
Thomas Pierrain
 
The 9 rules of debugging
The 9 rules of debuggingThe 9 rules of debugging
The 9 rules of debugging
Thomas Pierrain
 
Une nuit dans l'hexagone
Une nuit dans l'hexagoneUne nuit dans l'hexagone
Une nuit dans l'hexagone
Thomas Pierrain
 
Equiper sa voie
Equiper sa voieEquiper sa voie
Equiper sa voie
Thomas Pierrain
 
As time goes by (episode 2)
As time goes by (episode 2)As time goes by (episode 2)
As time goes by (episode 2)
Thomas Pierrain
 
Et si on parlait Éthique ?
Et si on parlait Éthique ?Et si on parlait Éthique ?
Et si on parlait Éthique ?
Thomas Pierrain
 
Sortir de notre zone de confort
Sortir de notre zone de confortSortir de notre zone de confort
Sortir de notre zone de confort
Thomas Pierrain
 
L'Agilité a grande échelle : conserver l'esprit, pas la lettre
L'Agilité a grande échelle : conserver l'esprit, pas la lettreL'Agilité a grande échelle : conserver l'esprit, pas la lettre
L'Agilité a grande échelle : conserver l'esprit, pas la lettre
Thomas Pierrain
 
Legacy club (english version)
Legacy club (english version)Legacy club (english version)
Legacy club (english version)
Thomas Pierrain
 
The art of Software Design
The art of Software DesignThe art of Software Design
The art of Software Design
Thomas Pierrain
 
CQRS without event sourcing
CQRS without event sourcingCQRS without event sourcing
CQRS without event sourcing
Thomas Pierrain
 
Async await...oh wait!
Async await...oh wait!Async await...oh wait!
Async await...oh wait!
Thomas Pierrain
 
Decouvrir CQRS (sans Event sourcing) par la pratique
Decouvrir CQRS (sans Event sourcing) par la pratiqueDecouvrir CQRS (sans Event sourcing) par la pratique
Decouvrir CQRS (sans Event sourcing) par la pratique
Thomas Pierrain
 
Decouvrir son sujet grace à l'event storming
Decouvrir son sujet grace à l'event stormingDecouvrir son sujet grace à l'event storming
Decouvrir son sujet grace à l'event storming
Thomas Pierrain
 
Ddd reboot (english version)
Ddd reboot (english version)Ddd reboot (english version)
Ddd reboot (english version)
Thomas Pierrain
 
Culture craft humantalks
Culture craft humantalksCulture craft humantalks
Culture craft humantalks
Thomas Pierrain
 

More from Thomas Pierrain (20)

The scale-up, the autonomy and the nuclear submarine
The scale-up, the autonomy and the nuclear submarineThe scale-up, the autonomy and the nuclear submarine
The scale-up, the autonomy and the nuclear submarine
 
La scale-up, l'autonomie et le sous-marin nucléaire
La scale-up, l'autonomie et le sous-marin nucléaireLa scale-up, l'autonomie et le sous-marin nucléaire
La scale-up, l'autonomie et le sous-marin nucléaire
 
De l'autre côté du miroir
De l'autre côté du miroirDe l'autre côté du miroir
De l'autre côté du miroir
 
eXtreme
eXtremeeXtreme
eXtreme
 
Write Antifragile & Domain-Driven tests with ”Outside-in diamond” ◆ TDD
Write Antifragile & Domain-Driven tests with ”Outside-in diamond” ◆ TDDWrite Antifragile & Domain-Driven tests with ”Outside-in diamond” ◆ TDD
Write Antifragile & Domain-Driven tests with ”Outside-in diamond” ◆ TDD
 
The 9 rules of debugging
The 9 rules of debuggingThe 9 rules of debugging
The 9 rules of debugging
 
Une nuit dans l'hexagone
Une nuit dans l'hexagoneUne nuit dans l'hexagone
Une nuit dans l'hexagone
 
Equiper sa voie
Equiper sa voieEquiper sa voie
Equiper sa voie
 
As time goes by (episode 2)
As time goes by (episode 2)As time goes by (episode 2)
As time goes by (episode 2)
 
Et si on parlait Éthique ?
Et si on parlait Éthique ?Et si on parlait Éthique ?
Et si on parlait Éthique ?
 
Sortir de notre zone de confort
Sortir de notre zone de confortSortir de notre zone de confort
Sortir de notre zone de confort
 
L'Agilité a grande échelle : conserver l'esprit, pas la lettre
L'Agilité a grande échelle : conserver l'esprit, pas la lettreL'Agilité a grande échelle : conserver l'esprit, pas la lettre
L'Agilité a grande échelle : conserver l'esprit, pas la lettre
 
Legacy club (english version)
Legacy club (english version)Legacy club (english version)
Legacy club (english version)
 
The art of Software Design
The art of Software DesignThe art of Software Design
The art of Software Design
 
CQRS without event sourcing
CQRS without event sourcingCQRS without event sourcing
CQRS without event sourcing
 
Async await...oh wait!
Async await...oh wait!Async await...oh wait!
Async await...oh wait!
 
Decouvrir CQRS (sans Event sourcing) par la pratique
Decouvrir CQRS (sans Event sourcing) par la pratiqueDecouvrir CQRS (sans Event sourcing) par la pratique
Decouvrir CQRS (sans Event sourcing) par la pratique
 
Decouvrir son sujet grace à l'event storming
Decouvrir son sujet grace à l'event stormingDecouvrir son sujet grace à l'event storming
Decouvrir son sujet grace à l'event storming
 
Ddd reboot (english version)
Ddd reboot (english version)Ddd reboot (english version)
Ddd reboot (english version)
 
Culture craft humantalks
Culture craft humantalksCulture craft humantalks
Culture craft humantalks
 

Recently uploaded

DfMAy 2024 - key insights and contributions
DfMAy 2024 - key insights and contributionsDfMAy 2024 - key insights and contributions
DfMAy 2024 - key insights and contributions
gestioneergodomus
 
An Approach to Detecting Writing Styles Based on Clustering Techniques
An Approach to Detecting Writing Styles Based on Clustering TechniquesAn Approach to Detecting Writing Styles Based on Clustering Techniques
An Approach to Detecting Writing Styles Based on Clustering Techniques
ambekarshweta25
 
Swimming pool mechanical components design.pptx
Swimming pool  mechanical components design.pptxSwimming pool  mechanical components design.pptx
Swimming pool mechanical components design.pptx
yokeleetan1
 
Water Industry Process Automation and Control Monthly - May 2024.pdf
Water Industry Process Automation and Control Monthly - May 2024.pdfWater Industry Process Automation and Control Monthly - May 2024.pdf
Water Industry Process Automation and Control Monthly - May 2024.pdf
Water Industry Process Automation & Control
 
Hybrid optimization of pumped hydro system and solar- Engr. Abdul-Azeez.pdf
Hybrid optimization of pumped hydro system and solar- Engr. Abdul-Azeez.pdfHybrid optimization of pumped hydro system and solar- Engr. Abdul-Azeez.pdf
Hybrid optimization of pumped hydro system and solar- Engr. Abdul-Azeez.pdf
fxintegritypublishin
 
NUMERICAL SIMULATIONS OF HEAT AND MASS TRANSFER IN CONDENSING HEAT EXCHANGERS...
NUMERICAL SIMULATIONS OF HEAT AND MASS TRANSFER IN CONDENSING HEAT EXCHANGERS...NUMERICAL SIMULATIONS OF HEAT AND MASS TRANSFER IN CONDENSING HEAT EXCHANGERS...
NUMERICAL SIMULATIONS OF HEAT AND MASS TRANSFER IN CONDENSING HEAT EXCHANGERS...
ssuser7dcef0
 
Pile Foundation by Venkatesh Taduvai (Sub Geotechnical Engineering II)-conver...
Pile Foundation by Venkatesh Taduvai (Sub Geotechnical Engineering II)-conver...Pile Foundation by Venkatesh Taduvai (Sub Geotechnical Engineering II)-conver...
Pile Foundation by Venkatesh Taduvai (Sub Geotechnical Engineering II)-conver...
AJAYKUMARPUND1
 
Recycled Concrete Aggregate in Construction Part III
Recycled Concrete Aggregate in Construction Part IIIRecycled Concrete Aggregate in Construction Part III
Recycled Concrete Aggregate in Construction Part III
Aditya Rajan Patra
 
AKS UNIVERSITY Satna Final Year Project By OM Hardaha.pdf
AKS UNIVERSITY Satna Final Year Project By OM Hardaha.pdfAKS UNIVERSITY Satna Final Year Project By OM Hardaha.pdf
AKS UNIVERSITY Satna Final Year Project By OM Hardaha.pdf
SamSarthak3
 
MCQ Soil mechanics questions (Soil shear strength).pdf
MCQ Soil mechanics questions (Soil shear strength).pdfMCQ Soil mechanics questions (Soil shear strength).pdf
MCQ Soil mechanics questions (Soil shear strength).pdf
Osamah Alsalih
 
Harnessing WebAssembly for Real-time Stateless Streaming Pipelines
Harnessing WebAssembly for Real-time Stateless Streaming PipelinesHarnessing WebAssembly for Real-time Stateless Streaming Pipelines
Harnessing WebAssembly for Real-time Stateless Streaming Pipelines
Christina Lin
 
Online aptitude test management system project report.pdf
Online aptitude test management system project report.pdfOnline aptitude test management system project report.pdf
Online aptitude test management system project report.pdf
Kamal Acharya
 
NO1 Uk best vashikaran specialist in delhi vashikaran baba near me online vas...
NO1 Uk best vashikaran specialist in delhi vashikaran baba near me online vas...NO1 Uk best vashikaran specialist in delhi vashikaran baba near me online vas...
NO1 Uk best vashikaran specialist in delhi vashikaran baba near me online vas...
Amil Baba Dawood bangali
 
Planning Of Procurement o different goods and services
Planning Of Procurement o different goods and servicesPlanning Of Procurement o different goods and services
Planning Of Procurement o different goods and services
JoytuBarua2
 
digital fundamental by Thomas L.floydl.pdf
digital fundamental by Thomas L.floydl.pdfdigital fundamental by Thomas L.floydl.pdf
digital fundamental by Thomas L.floydl.pdf
drwaing
 
Final project report on grocery store management system..pdf
Final project report on grocery store management system..pdfFinal project report on grocery store management system..pdf
Final project report on grocery store management system..pdf
Kamal Acharya
 
Heap Sort (SS).ppt FOR ENGINEERING GRADUATES, BCA, MCA, MTECH, BSC STUDENTS
Heap Sort (SS).ppt FOR ENGINEERING GRADUATES, BCA, MCA, MTECH, BSC STUDENTSHeap Sort (SS).ppt FOR ENGINEERING GRADUATES, BCA, MCA, MTECH, BSC STUDENTS
Heap Sort (SS).ppt FOR ENGINEERING GRADUATES, BCA, MCA, MTECH, BSC STUDENTS
Soumen Santra
 
Governing Equations for Fundamental Aerodynamics_Anderson2010.pdf
Governing Equations for Fundamental Aerodynamics_Anderson2010.pdfGoverning Equations for Fundamental Aerodynamics_Anderson2010.pdf
Governing Equations for Fundamental Aerodynamics_Anderson2010.pdf
WENKENLI1
 
Building Electrical System Design & Installation
Building Electrical System Design & InstallationBuilding Electrical System Design & Installation
Building Electrical System Design & Installation
symbo111
 
Design and Analysis of Algorithms-DP,Backtracking,Graphs,B&B
Design and Analysis of Algorithms-DP,Backtracking,Graphs,B&BDesign and Analysis of Algorithms-DP,Backtracking,Graphs,B&B
Design and Analysis of Algorithms-DP,Backtracking,Graphs,B&B
Sreedhar Chowdam
 

Recently uploaded (20)

DfMAy 2024 - key insights and contributions
DfMAy 2024 - key insights and contributionsDfMAy 2024 - key insights and contributions
DfMAy 2024 - key insights and contributions
 
An Approach to Detecting Writing Styles Based on Clustering Techniques
An Approach to Detecting Writing Styles Based on Clustering TechniquesAn Approach to Detecting Writing Styles Based on Clustering Techniques
An Approach to Detecting Writing Styles Based on Clustering Techniques
 
Swimming pool mechanical components design.pptx
Swimming pool  mechanical components design.pptxSwimming pool  mechanical components design.pptx
Swimming pool mechanical components design.pptx
 
Water Industry Process Automation and Control Monthly - May 2024.pdf
Water Industry Process Automation and Control Monthly - May 2024.pdfWater Industry Process Automation and Control Monthly - May 2024.pdf
Water Industry Process Automation and Control Monthly - May 2024.pdf
 
Hybrid optimization of pumped hydro system and solar- Engr. Abdul-Azeez.pdf
Hybrid optimization of pumped hydro system and solar- Engr. Abdul-Azeez.pdfHybrid optimization of pumped hydro system and solar- Engr. Abdul-Azeez.pdf
Hybrid optimization of pumped hydro system and solar- Engr. Abdul-Azeez.pdf
 
NUMERICAL SIMULATIONS OF HEAT AND MASS TRANSFER IN CONDENSING HEAT EXCHANGERS...
NUMERICAL SIMULATIONS OF HEAT AND MASS TRANSFER IN CONDENSING HEAT EXCHANGERS...NUMERICAL SIMULATIONS OF HEAT AND MASS TRANSFER IN CONDENSING HEAT EXCHANGERS...
NUMERICAL SIMULATIONS OF HEAT AND MASS TRANSFER IN CONDENSING HEAT EXCHANGERS...
 
Pile Foundation by Venkatesh Taduvai (Sub Geotechnical Engineering II)-conver...
Pile Foundation by Venkatesh Taduvai (Sub Geotechnical Engineering II)-conver...Pile Foundation by Venkatesh Taduvai (Sub Geotechnical Engineering II)-conver...
Pile Foundation by Venkatesh Taduvai (Sub Geotechnical Engineering II)-conver...
 
Recycled Concrete Aggregate in Construction Part III
Recycled Concrete Aggregate in Construction Part IIIRecycled Concrete Aggregate in Construction Part III
Recycled Concrete Aggregate in Construction Part III
 
AKS UNIVERSITY Satna Final Year Project By OM Hardaha.pdf
AKS UNIVERSITY Satna Final Year Project By OM Hardaha.pdfAKS UNIVERSITY Satna Final Year Project By OM Hardaha.pdf
AKS UNIVERSITY Satna Final Year Project By OM Hardaha.pdf
 
MCQ Soil mechanics questions (Soil shear strength).pdf
MCQ Soil mechanics questions (Soil shear strength).pdfMCQ Soil mechanics questions (Soil shear strength).pdf
MCQ Soil mechanics questions (Soil shear strength).pdf
 
Harnessing WebAssembly for Real-time Stateless Streaming Pipelines
Harnessing WebAssembly for Real-time Stateless Streaming PipelinesHarnessing WebAssembly for Real-time Stateless Streaming Pipelines
Harnessing WebAssembly for Real-time Stateless Streaming Pipelines
 
Online aptitude test management system project report.pdf
Online aptitude test management system project report.pdfOnline aptitude test management system project report.pdf
Online aptitude test management system project report.pdf
 
NO1 Uk best vashikaran specialist in delhi vashikaran baba near me online vas...
NO1 Uk best vashikaran specialist in delhi vashikaran baba near me online vas...NO1 Uk best vashikaran specialist in delhi vashikaran baba near me online vas...
NO1 Uk best vashikaran specialist in delhi vashikaran baba near me online vas...
 
Planning Of Procurement o different goods and services
Planning Of Procurement o different goods and servicesPlanning Of Procurement o different goods and services
Planning Of Procurement o different goods and services
 
digital fundamental by Thomas L.floydl.pdf
digital fundamental by Thomas L.floydl.pdfdigital fundamental by Thomas L.floydl.pdf
digital fundamental by Thomas L.floydl.pdf
 
Final project report on grocery store management system..pdf
Final project report on grocery store management system..pdfFinal project report on grocery store management system..pdf
Final project report on grocery store management system..pdf
 
Heap Sort (SS).ppt FOR ENGINEERING GRADUATES, BCA, MCA, MTECH, BSC STUDENTS
Heap Sort (SS).ppt FOR ENGINEERING GRADUATES, BCA, MCA, MTECH, BSC STUDENTSHeap Sort (SS).ppt FOR ENGINEERING GRADUATES, BCA, MCA, MTECH, BSC STUDENTS
Heap Sort (SS).ppt FOR ENGINEERING GRADUATES, BCA, MCA, MTECH, BSC STUDENTS
 
Governing Equations for Fundamental Aerodynamics_Anderson2010.pdf
Governing Equations for Fundamental Aerodynamics_Anderson2010.pdfGoverning Equations for Fundamental Aerodynamics_Anderson2010.pdf
Governing Equations for Fundamental Aerodynamics_Anderson2010.pdf
 
Building Electrical System Design & Installation
Building Electrical System Design & InstallationBuilding Electrical System Design & Installation
Building Electrical System Design & Installation
 
Design and Analysis of Algorithms-DP,Backtracking,Graphs,B&B
Design and Analysis of Algorithms-DP,Backtracking,Graphs,B&BDesign and Analysis of Algorithms-DP,Backtracking,Graphs,B&B
Design and Analysis of Algorithms-DP,Backtracking,Graphs,B&B
 

Hexagonal And Beyond

  • 2. Hexagonal Architecture & Beyond building software since 25 years eXtreme Programmer now dealing with people after 12 years of architecture and change management currently VP of Engineering @ Agicap in Lyon (scale up) XP, TDD, DDD, Event Sourcing, Tech architecture, Reactive Programming DDD FR organizer Thomas PIERRAIN (use case driven)
  • 5. HEXAGONAL ARCHITECTURE: ORIGINS • SMALLTALK PROJECT (MID 90s): To be able to work 2 weeks without the database • WEATHER WARNING SYSTEM: To be able to connect to multiple external systems (http, telemetry, phone, RSS, db) without changing the whole software every time Alistair Cockburn
  • 6. HEXAGONAL ARCHITECTURE: ONE PATTERN TO… Alistair Cockburn
  • 7. HEXAGONAL ARCHITECTURE: ACTUALLY, ONE PATTERN TO… • Easily switch one technology with another without breaking our core domain code (like plug-ins) • Easily develop and test an application in isolation from its eventual run- time devices and databases • Have good time to market and fast feedbacks about what is really at stakes for our users Alistair Cockburn
  • 11. DOMAIN INFRASTRUCTURE (in proc) PORTS & ADAPTERS PORTS IN THE DOMAIN ADAPTERS IN THE INFRA
  • 12. DEPENDENCIES ALWAYS TOWARDS THE INSIDE DOMAIN DEPENDENCY INVERSION PRINCIPLE A.K.A. CONFIGURABLE DEPENDENCIES INFRA
  • 14. “implements” DOMAIN INFRASTRUCTURE « uses » DEEPLY ASYMMETRICAL LEFT-SIDE PORTS « uses » « uses » “use” RIGHT-SIDE ADAPTERS RIGHT-SIDE PORTS “implemented by”
  • 15. “implements” DOMAIN INFRASTRUCTURE « uses » DEEPLY ASYMMETRICAL LEFT-SIDE PORTS TO ENTER OUR DOMAIN LEFT-SIDE ADAPTERS TRANSLATE TECH TO DOMAIN RIGHT-SIDE ADAPTERS TRANSLATE DOMAIN TO TECH RIGHT-SIDE PORTS FOR OUR DOMAIN TO INTERACT WITH OTHERS « uses » « uses » “use” “implemented by”
  • 16. PORTS ARE CONTRACTS LEFT-SIDE PORTS ARE DOMAIN- DRIVEN CONTRACTS FOR OTHERS TO INTERACT WITH US DOMAIN INFRASTRUCTURE « uses » RIGHT-SIDE PORTS ARE DOMAIN- DRIVEN CONTRACTS FOR US TO ASK SOMETHING TO SOMEONE ELSE
  • 17. HEXAGONAL “MICRO” SERVICES @tpierrain (use case driven) AUDITORIUM SEATINGS API SEAT SUGGESTIONS DOMAIN INFRASTRUCTURE HTTP SUGGESTIONS DB SEAT SUGGESTIONS API (in proc) HTTP
  • 20. SUGGESTING SEATS IN THEATERS “What seats can you suggest for 3 people wishing to attend the show Z?”
  • 21. SEATS SUGGESTIONS API SUGGESTING SEATS IN THEATERS “What seats can you suggest for 3 people wishing to attend the show Z?”
  • 22. AUDITORIUM SEATING API “I need the auditorium seating of show Z” SEATS SUGGESTIONS API SUGGESTING SEATS IN THEATERS “What seats can you suggest for 3 people wishing to attend the show Z?”
  • 23. AUDITORIUM SEATING API “I need the auditorium seating of show Z” SEATS SUGGESTIONS API SUGGESTING SEATS IN THEATERS “What seats can you suggest for 3 people wishing to attend the show Z?”
  • 24. AUDITORIUM SEATING API “I need the auditorium seating of show Z” SEATS SUGGESTIONS API SUGGESTING SEATS IN THEATERS “What seats can you suggest for 3 people wishing to attend the show Z?”
  • 25. AUDITORIUM SEATING API SEATS AVAILABILITY API “I need the auditorium seating of show Z” SEATS SUGGESTIONS API “I also need to know which seats are already reserved for show Z” SUGGESTING SEATS IN THEATERS “What seats can you suggest for 3 people wishing to attend the show Z?”
  • 26. AUDITORIUM SEATING API SEATS AVAILABILITY API “I need the auditorium seating of show Z” SEATS SUGGESTIONS API “I also need to know which seats are already reserved for show Z” SUGGESTING SEATS IN THEATERS “What seats can you suggest for 3 people wishing to attend the show Z?”
  • 27. AUDITORIUM SEATING API SEATS AVAILABILITY API “I need the auditorium seating of show Z” SEATS SUGGESTIONS API “I also need to know which seats are already reserved for show Z” OUR CORE DOMAIN SUGGESTING SEATS IN THEATERS “What seats can you suggest for 3 people wishing to attend the show Z?”
  • 28. AUDITORIUM SEATING API SEATS AVAILABILITY API “I need the auditorium seating of show Z” SEATS SUGGESTIONS API “I also need to know which seats are already reserved for show Z” SUGGESTING SEATS IN THEATERS “What seats can you suggest for 3 people wishing to attend the show Z?”
  • 29. AUDITORIUM SEATING API SEATS AVAILABILITY API “I need the auditorium seating of show Z” SEATS SUGGESTIONS API “I also need to know which seats are already reserved for show Z” “Ok. You can have seats A1, A2, A3 in pricing tier 1, C4, C5, C6 in pricing tier 2 …” SUGGESTING SEATS IN THEATERS “What seats can you suggest for 3 people wishing to attend the show Z?”
  • 30. AUDITORIUM SEATING API SEATS AVAILABILITY API “I need the auditorium seating of show Z” SEATS SUGGESTIONS API “I also need to know which seats are already reserved for show Z” “Ok. You can have seats A1, A2, A3 in pricing tier 1, C4, C5, C6 in pricing tier 2 …” SUGGESTING SEATS IN THEATERS “What seats can you suggest for 3 people wishing to attend the show Z?”
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 40. HEXAGONAL ARCHITECTURE MAIN CHALLENGES • UNDERSTAND THE LEFT/RIGHT ASYMMETRY • PORTS SHOULD “EXPRESS” DOMAIN CONCEPTS ONLY • TESTS ARE KIND OF ADAPTERS
  • 41.
  • 44. OTHER INTENTS #1 • To properly split and protect our domain code from the infrastructure one community
  • 45. OTHER INTENTS #2 • To reduce layering and complexity of our “baklava” architectures community
  • 46. OTHER INTENTS #3 • To postpone architecture decision at the right time (when we understand the domain & our constraints) community
  • 47. OTHER INTENTS #4 • To modularize a monolith and get ready for a physical split among various components/apis/μ services community
  • 48. AUDITORIUM LAYOUTS DOMAIN INFRA DB THE HIVE - MODULAR MONOLITH WITH “HEXAGONS” INSIDE AUDITORIUM SEATINGS DOMAIN INFRA DB REPOSITORY (ADAPTER) SEATS AVAILABILITY DOMAIN INFRA DB In-Proc @tpierrain (use case driven) 2.2 SEAT SUGGESTIONS DOMAIN DB INFRA HTTP In-Proc In-Proc SUGGESTI0NS WEBCONTROLLER (ADAPTER) AUDITORIUMSEATINGS WEBCONTROLLER (ADAPTER) INFRA HTTP The whole hexagons are assembled in the same process. We are using “lightweight” & In-Proc driven adapters that are making direct memory calls towards other hexagons' driver ports (i.e. driven adapters calling someone else’s driver ports). Modularized monoliths are very handy for any refactoring phase.
  • 49. AUDITORIUM LAYOUTS DOMAIN INFRA DB SEAT SUGGESTIONS DOMAIN INFRASTRUCTURE HTTP THE SPLIT - “MICRO” SERVICES POWERED BY HEXAGONAL ARCHITECTURE DB SEAT SUGGESTIONS API @tpierrain (use case driven) AUDITORIUM SEATING DOMAIN INFRA DB REPO (ADAPTER) SEATS AVAILABILITY DOMAIN INFRA DB HTTP HTTP HTTP (in proc) The next step after a monolith modularization is often to split the various hexagons into dedicated services/APIs. But beware of the Distributed Monolith pitfall occurring very often when the services/APIs aren’t aligned with (sub) domain concerns (see. Bounded Contexts from DDD). IProvideUpToDateAuditoriumSeatings (driven port)
  • 50. OTHER INTENTS #5 • To adapt not only technologies but also external domain models community
  • 51. AUDITORIUM LAYOUTS DOMAIN INFRA DB SEAT SUGGESTIONS DOMAIN INFRASTRUCTURE HTTP HEXAGONAL “HACKED” WITH AN ANTI-CORRUPTION LAYER (ACL) ADAPTER DB SEAT SUGGESTIONS API @tpierrain (use case driven) SEATS AVAILABILITY DOMAIN INFRA DB HTTP HTTP (in proc) DB The AuditoriumSeatings ACL (in green) exposes us ready-to-use Auditorium Seatings for shows. It assembles them from various external sources/APIs. An Auditorium Seating is the Auditorium Layout for a show, with indications about every current seat availability. Interesting option/trade-off when we don’t want to couple our real core domain (i.e. to suggest the best possible seats for groups of people) with how to infer Auditorium Seatings from various external sources and models. More about it (Hexagonal or not Hexagonal?) : https://tpierrain.blogspot.com/2020/11/hexagonal-or-not-hexagonal.html Provides Auditorium layout (Topology) for a show, but with no information about seats availabilities Provides list of already reserved seats for a show IProvideUpToDateAuditoriumSeatings (driven port)
  • 52. AUDITORIUM LAYOUTS DOMAIN INFRA DB SEAT SUGGESTIONS DOMAIN INFRASTRUCTURE HTTP THE SPLIT - “MICRO” SERVICES POWERED BY HEXAGONAL ARCHITECTURE DB SEAT SUGGESTIONS API @tpierrain (use case driven) AUDITORIUM SEATING DOMAIN INFRA DB REPO (ADAPTER) SEATS AVAILABILITY DOMAIN INFRA DB HTTP HTTP HTTP (in proc) The next step after a monolith modularization is often to split the various hexagons into dedicated services/APIs. But beware of the Distributed Monolith pitfall occurring very often when the services/APIs aren’t aligned with (sub) domain concerns (see. Bounded Contexts from DDD). IProvideUpToDateAuditoriumSeatings (driven port)
  • 53. HEXAGONAL OR NOT HEXAGONAL? YES? An Adapter can be an ACL I may not want my domain to be polluted by external models or upstream organizational changes NO? I want to stick to Alistair original motivations (i.e. technological)  port = only to swap technology
  • 54. HEXAGONAL OR NOT HEXAGONAL? AND THIS ONE? Note: an external API is often a former module extracted from a modular monolith Auditorium Seating API HTTP HTTP
  • 55. HEXAGONAL ARCHITECTURE: ONE PATTERN, MULTIPLE FACETS? • The technological facet: to easily switch one technology with another without breaking our core domain code (like plug-ins) • The testability facet: to easily develop and test an application in isolation from its eventual run-time devices and databases • The fast feedback facet: to have good time to market and fast feedbacks about what is really at stakes for our users • The tactical DDD facet: to properly split and protect our domain code from the infrastructure one • The simplicity facet: to reduce layering and complexity of our architectures • The late architectural decisions facet: to postpone architectural decisions at the right time • The strategic DDD facet: to adapt not only technologies but also external domain models • The Refactoring hive facet: to modularize a monolith splitting every Bounded Context into a hexagon Community
  • 56. SO…
  • 57. HEXAGONAL OR NOT HEXAGONAL? YES ? It’s a multi-facets pattern! o The technological facet o The testability facet o The tactical DDD facet o The simplicity facet o The quick feedback facet o The late architectural decisions facet o The strategic DDD facet http://tpierrain.blogspot.com/2020/11/hexagonal-or-not-hexagonal.html
  • 58. HEXAGONAL OR NOT HEXAGONAL?
  • 59. LOOKS LIKE… …WE NEED TO FIND NEW NAMES FOR ALL OUR USAGES AS A COMMUNITY