Ithaca: the Clean and Hexagonal Architectural Island

lucaguada 12 views 33 slides Jul 09, 2024
Slide 1
Slide 1 of 33
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24
Slide 25
25
Slide 26
26
Slide 27
27
Slide 28
28
Slide 29
29
Slide 30
30
Slide 31
31
Slide 32
32
Slide 33
33

About This Presentation

An introduction to Clean and Hexagonal Architecture principles:

Get ready to sail from the Scylla and Charybdis’s shores of 3-layered architecture to the safe Ithaca refreshing shores of Clean and Hexagonal Architecture! Brace yourself as we surf from zero to Ulysses (a hero!), leaving behind mon...


Slide Content

Ithaca
The Clean and Hexagonal Architectural Island

Luca Guadagnini
@lucaguada
https://www.cherrychain.it
Domain
Driven
Design

Our Odyssey
❖Book 1: What is software architecture?

❖Book 2: A common 3-layered approach

❖Book 3: A clean and hexagonal solution

❖Conclusions: Ithaca

What are we talking about, when we are talking about
Software Architecture?
oh com’on!
building
software is
easy!

Software elements for reasoning
Library
System call
Interface
File
Process
control
Cache
mechanism
User Interface
Library
Blocking I/O
driver

Software elements for reasoning
File
UI
System call
Interface
Library 1
Library 2
Process
control
Cache
mechanism
Blocking I/O
driver

The eye of the beholder stakeholder
Hi little architect, I’m your
stakeholder, is your
software good enough?
Nobody knows
Developers

What can I do to make my architecture nice?
Quality attributes:

●Availability
●Deployability
●Energy Efficiency
●Integrability
●Modifiability
●Performance
●Safety
●Security
●Testability
●Usability

What can I do to make my architecture nice?
Quality attributes:

●Availability
●Deployability
●Energy Efficiency
●Integrability
●Modifiability
●Performance
●Safety
●Security
●Testability
●Usability
We don’t
need to
cover
them all
Process guidelines:

●An architecture team and a CTO bound to developers

●Focus on a well-specified queue of QA’s

●Docs!

●Evaluated by QA

●From a walking-skeleton with no integrations to a
incrementally growing system

What can I do to make my architecture nice?
Quality attributes:

●Availability
●Deployability
●Energy Efficiency
●Integrability
●Modifiability
●Performance
●Safety
●Security
●Testability
●Usability
Structural guidelines:

●Functional modularization

●QA’s obtained with well-know architectural patterns

●Platform or tool independent

●Write and read sides segregation

●Design patterns are your friend (when you know the
problem you want to solve)We don’t
need to
cover
them all

A common architectural pattern: the 3-layered architecture
oh com’on!
my
architecture
is fine!

No really, how can I start?
3-layered architecture
Presentation
Business
Persistence

No really, how can I start?
3-layered architecture
Presentation
Business
Persistence
Process control
Blocking I/O
driver
User Interface
File
Scheduler
Request

Good enough?
Quality attributes:

●Deployability
●Modifiability
●Testability
n-layered architecture
Presentation
Business
Persistence
Web
Database

Good enough?
Quality attributes:

●Deployability
●Modifiability
●Testability
n-layered architecture
Web Presentation
Business
Persistence
Web HTTP/1.1
Database
Web HTTP/2.0
Mobile Presentation
Business

Simplest solution: The Ram-Runaway Pattern

What really matters?
n
m
-layered architecture
Presentation
Business
Persistence

How to be clean and hexagonal with an architecture
oh com’on!
it’s not done
yet?

Let’s start to be clean: Domain Entities
Domain
Entities

Let’s start to be clean: Use Cases
Use Cases
Domain
Entities

Let’s start to be clean: Services (i.e. Controllers, Gateways, etc…)
Use Cases
Domain
Entities
Controllers
Presenters
Gateways

Let’s start to be clean: External Services (i.e. Web, DB, UI, etc…)
Use Cases
Domain
Entities
Controllers
Presenters
Gateways
Web
UI
DB

Keep going hexagonal: Domain Model
User Interface Infrastructure
Domain Model

Keep going hexagonal: Domain Services
User Interface Infrastructure
Domain Services
Domain Model

Keep going hexagonal: Application Core
User Interface Infrastructure
Application Core
Domain Services
Domain Model

Keep going hexagonal: Requests from outside?
User Interface Infrastructure
Application Core
Domain Services
Domain Model

Keep going hexagonal: Ingress Ports and Adapters
User Interface
Infrastructure
Port
Port
Web Adapter
Terminal Adapter
Application Core
Domain Services
Domain Model

Keep going hexagonal: Egress Ports and Adapters
User Interface
Infrastructure
Port
Port
Web Adapter
Terminal Adapter
Port
Port
ORM Adapter
DB Adapter
Mail Adapter
Application Core
Domain Services
Domain Model

Keep going hexagonal: Slice and dice!
User Interface
Infrastructure
Port
Port
Web Adapter
Terminal Adapter
Port
Port
ORM Adapter
DB Adapter
Mail Adapter
Application Core
Domain Services
Domain Model
Component

Conclusions
Itacha!
at last!
What we learnt:

●Software architecture is not trivial

●Process and structural steps are essential

●Team communication is part of architectural tactics

●Business domain always rules

●Component isolations for the better

●Greek mythology is awesome

Conclusions
Itacha!
at last!
You can choose how to end the Odysseus you got in yourself:

●in homeric Odyssey the hero died by age

●in the tragedy Telegonia the hero is killed by his son

●in Odyssey written by Nikos Kazantzakis the hero started a new
journey of dreams and discoveries

●in Dante’s Inferno the hero died because he wanted to know too
much

●write your own story

Please Nobody, let
me know if
everything works!

References:

●Software Architecture in Practice
by Len Bass, Paul Clements, Rick Kazman

●Fundamentals of Software Architecture
by Mark Richards, Neal Ford

●Clean Architecture
by Robert C. Martin

●Get Your Hands Dirty on Clean Architecture
by Tom Hombergs

●Designing Hexagonal Architecture with Java
by Davi Vieira
Thanks
for
listening!