Slide 1

Slide 1 text

HEXAGONAL ARCHITECTURE Victor "Frodo" Martinez June, 2022 Photo by Marcel Strauß

Slide 2

Slide 2 text

● INTRODUCTION AND THEORETICAL BACKGROUND (20min) ● SHOW ME THE CODE (20min) ● QUESTIONS (5min) TOTAL = 45min AGENDA

Slide 3

Slide 3 text

! DISCLAIMER

Slide 4

Slide 4 text

WHY ?

Slide 5

Slide 5 text

ONCE UPON A TIME… Photo by Brian McGowan

Slide 6

Slide 6 text

THE NEW SUPER-SECRET MEGA BLAST DISRUPTIVE INNOVATIVE DATA-DRIVEN PROJECT

Slide 7

Slide 7 text

THE NEW SUPER-SECRET MEGA BLAST DISRUPTIVE INNOVATIVE DATA-DRIVEN PROJECT

Slide 8

Slide 8 text

LOGIC THE NEW SUPER-SECRET MEGA BLAST DISRUPTIVE INNOVATIVE DATA-DRIVEN PROJECT

Slide 9

Slide 9 text

LOGIC THE NEW SUPER-SECRET MEGA BLAST DISRUPTIVE INNOVATIVE DATA-DRIVEN PROJECT

Slide 10

Slide 10 text

LOGIC FLASK CLI THE NEW SUPER-SECRET MEGA BLAST DISRUPTIVE INNOVATIVE DATA-DRIVEN PROJECT

Slide 11

Slide 11 text

LOGIC FLASK CLI THE NEW SUPER-SECRET MEGA BLAST DISRUPTIVE INNOVATIVE DATA-DRIVEN PROJECT

Slide 12

Slide 12 text

LOGIC FLASK CLI THE NEW SUPER-SECRET MEGA BLAST DISRUPTIVE INNOVATIVE DATA-DRIVEN PROJECT

Slide 13

Slide 13 text

LOGIC FLASK CLI PROBLEMS

Slide 14

Slide 14 text

LOGIC FLASK CLI PROBLEMS TECHNOLOGY-DRIVEN LACK OF DOMAIN COUPLED TO TECHNOLOGY HARD TO CHANGE

Slide 15

Slide 15 text

MEDICAL ANNECDOTE

Slide 16

Slide 16 text

YOUR PROJECT IS NOT THE UNDERLYING TECHNOLOGY.

Slide 17

Slide 17 text

TECHNICAL COMPLEXITY VS BUSINESS COMPLEXITY

Slide 18

Slide 18 text

TECHNICAL COMPLEXITY DATABASE PERSISTENCE QUEUE PUBLISHING FILE STORAGE CACHE API

Slide 19

Slide 19 text

BUSINESS COMPLEXITY ESTIMATED DELIVERY TIME GENERATE CONTRACT ORDER A PRODUCT CALC TAXES

Slide 20

Slide 20 text

HEXAGONAL ARCHITECTURE

Slide 21

Slide 21 text

HEXAGONAL ARCHITECTURE Allow an application to equally be driven by users, programs, automated test or batch scripts, and to be developed and tested in isolation from its eventual run-time devices and databases. Alistair Cockburn 2005, Ports and Adapters

Slide 22

Slide 22 text

HEXAGONAL ARCHITECTURE Allow an application to equally be driven by users, programs, automated test or batch scripts, and to be developed and tested in isolation from its eventual run-time devices and databases. Alistair Cockburn 2005, Ports and Adapters Hexagonal Architecture OR Hexagonal Design?

Slide 23

Slide 23 text

"Atividades relacionadas a arquitetura de software são sempre de design. Entretanto, nem todas atividade de design são sobre arquitetura. O objetivo primário da arquitetura de software é garantir que os atributos de qualidade, restrições de alto nível e os objetivos do negócio, sejam atendidos pelo sistema. Qualquer decisão de design que não tenha relação com este objetivo não é arquitetural. Todas as decisões de design para um componente que não sejam “visíveis” fora dele, geralmente, também não são."- Elemar Jr. https://eximia.co/quais-sao-as-diferencas-entre-arquitetura-e-design-de-software/

Slide 24

Slide 24 text

LET'S DIVE INTO PORTS & ADAPTERS Photo by Brina Blum

Slide 25

Slide 25 text

LET'S DIVE INTO PORTS & ADAPTERS Photo by Brina Blum INTERFACES & IMPLEMENTATIONS

Slide 26

Slide 26 text

LET'S DIVE INTO PORTS & ADAPTERS Photo by Brina Blum PORT ADAPTER INTERFACES & IMPLEMENTATIONS

Slide 27

Slide 27 text

LET'S DIVE INTO PORTS & ADAPTERS

Slide 28

Slide 28 text

LET'S DIVE INTO PORTS & ADAPTERS INTERFACES & IMPLEMENTATIONS

Slide 29

Slide 29 text

LET'S DIVE INTO PORTS & ADAPTERS INTERFACES & IMPLEMENTATIONS SOLID

Slide 30

Slide 30 text

LET'S DIVE INTO PORTS & ADAPTERS INTERFACES & IMPLEMENTATIONS SOLID DEPENDENCY INVERSION PRINCIPLE

Slide 31

Slide 31 text

DEPENDENCY INVERSION PRINCIPLE "High level modules should not depend on low level modules; both should depend on abstractions. Abstractions should not depend on details. Details should depend upon abstractions."

Slide 32

Slide 32 text

DEPENDENCY INVERSION PRINCIPLE "High level modules should not depend on low level modules; both should depend on abstractions. Abstractions should not depend on details. Details should depend upon abstractions." DEPEND ON ABSTRACTIONS, NOT DETAILS.

Slide 33

Slide 33 text

DEPENDENCY INVERSION PRINCIPLE PORT: DATABASE

Slide 34

Slide 34 text

DEPENDENCY INVERSION PRINCIPLE ADAPTER: DATABASE

Slide 35

Slide 35 text

DEPENDENCY INVERSION PRINCIPLE PORT: CONTROLLER

Slide 36

Slide 36 text

DEPENDENCY INVERSION PRINCIPLE ADAPTER: CONTROLLER

Slide 37

Slide 37 text

ANATOMY

Slide 38

Slide 38 text

DOMAIN PORT PORT PORT PORT PORT PORT ADAPTER ADAPTER ADAPTER ADAPTER ADAPTER ADAPTER API DATABASE MESSAGE BROKER AUTH UI NOTIFICATION ANATOMY

Slide 39

Slide 39 text

CREATE CONTRACT ANATOMY

Slide 40

Slide 40 text

CREATE CONTRACT DATA PORT ANATOMY

Slide 41

Slide 41 text

CREATE CONTRACT DATA PORT ADAPTER REST API ANATOMY

Slide 42

Slide 42 text

CREATE CONTRACT DATA PORT ADAPTER REST API DB PORT ANATOMY

Slide 43

Slide 43 text

CREATE CONTRACT DATA PORT ADAPTER REST API DB PORT ADAPTER POSTGRES DATABASE ANATOMY

Slide 44

Slide 44 text

CREATE CONTRACT DATA PORT ADAPTER REST API DB PORT ADAPTER POSTGRES DATABASE STORAGE PORT ANATOMY

Slide 45

Slide 45 text

CREATE CONTRACT DATA PORT ADAPTER REST API DB PORT ADAPTER POSTGRES DATABASE STORAGE PORT ADAPTER S3 STORAGE ANATOMY

Slide 46

Slide 46 text

ANATOMY

Slide 47

Slide 47 text

INPUT ANATOMY

Slide 48

Slide 48 text

INPUT PROCESSING ANATOMY

Slide 49

Slide 49 text

INPUT PROCESSING OUTPUT OUTPUT ANATOMY

Slide 50

Slide 50 text

ADAPTER ADAPTER ADAPTER ADAPTER ADAPTER ADAPTER INPUT ADAPTERS OUTPUT ADAPTERS

Slide 51

Slide 51 text

DOMAIN PORT PORT PORT PORT PORT PORT ADAPTER ADAPTER ADAPTER ADAPTER ADAPTER ADAPTER API DATABASE MESSAGE BROKER AUTH UI NOTIFICATION WHAT IF WE NEED TO CHANGE THE ADAPTER?

Slide 52

Slide 52 text

WHAT IF WE NEED TO CHANGE THE ADAPTER? DOMAIN PORT PORT PORT PORT PORT PORT A A A A A FLASK POSTGRES RABBITMQ … SNS A PUBSUB A SQS A REDIS A MONGODB A FIREBASE A A FALCON APPLE A HUG A A A A A … … … … …

Slide 53

Slide 53 text

IT'S ALL ABOUT S O L I D Figure: Pereira, Matheus. "Capitals of classical antiquity: Understand the difference between the 5 orders" ArchDaily, May 2018, www.archdaily.com/892595/capitals-of-classical-antiquity-understand-the-difference-between-the-5-orders. Accessed 1 June, 2022.

Slide 54

Slide 54 text

"TALK IS CHEAP. SHOW ME THE CODE." - LINUS TORVALDS https://github.com/victormartinez/ flask-hexagonal