SlideShare uma empresa Scribd logo
1 de 39
Baixar para ler offline
“Crie sua aplicação para funcionar sem ter nem uma UI ou
base de dados, ao qual você pode rodar testes de regressão
automatizado, implemente quando a base de dados não está
disponível e conecte aplicações sem envolver elas.
(Alistair Cockburn)
1
ARQUITETURA HEXAGONAL:
UMA INTRODUÇÃO
Morvana Bonin
▷ Desenvolvedora backend na Sensedia
▷ Analista de sistema formada pela faculdade
SENAC-RS de Porto Alegre
▷ Curiosa e apaixonada por aprender desde
tecnologia até a entender certos
comportamentos humanos.
▷ Otaku
contatos:
@morvanabonin
gmail.com/twitter/insta/gitlab
3
Microservices
Porto Alegre
4
Não existe bala
de prata!
5
“Uma pessoa imatura pensa que todas suas
escolhas geram ganhos...
uma pessoa madura sabe que todas as
escolhas tem perdas.
(Augusto Cury)
6
1.
Arquitetura Hexagonal
Afinal o que é?
7
8
imagemporStefanoAlletti
https://stefanoalletti.wordpress.com/2017/10/27/hexagonal-architecture
9
▷ Criada em 2005 por Alistair
Cockburn
▷ Também conhecida como
padrão de portas e
adaptadores
▷ É uma guideline que serve de
referência para construção
de de software.
10
Onion
Architecture
▷ Dificuldade na
construção e
implementação
dos testes
Motivação
▷ Dificuldade na
manutenção de
código.
11
▷ Evolução da
aplicação devido a
alta dependência
com fatores
externos.
12
Natureza da Solução
Separar a parte interna da
externa, ou seja, regras de
negócio na base de dados ou
na interface do usuário.
13
Separation of Concerns
(SoC)
Separar conceitos de forma
modular e com cada módulo
se atendo a resolver apenas
um único problema.
A arquitetura hexagonal tem o
seguinte princípio de
dependências:
Somente de fora para dentro!
14
15
imagemporNetflixTechnologyBlog
https://netflixtechblog.com/ready-for-changes-with-hexagonal-architecture-b31
5ec967749
2.
Centro do Hexágono
Domínio
16
17
Foco no negócio
Seu principal objetivo é
permitir que um software
seja criado e testado
focando na regra de
negócios e ignorando
dependências externas
imagemporNetflixTechnologyBlog
https://netflixtechblog.com/ready-for-changes-with-hexagonal-architecture-b31
5ec967749
No centro do Hexágono temos
▷ Domínios/ Entidades
▷ Interfaces (farão o papel de portas)
▷ Services (Classes)
▷ Exceptions do sistema
▷ IoC, Logs
O centro do hexágono não deve ser influenciável por tecnologias
externas, bem como interfaces gráficas, interfaces comunicações
e dispositivos externos do mundo real.
18
19
Fora do Hexágono
Na parte externa do hexágono nós temos os atores, que
serão qualquer interação com o mundo real que nossa
aplicação irá interagir.
São divididos em 2 grupos:
1. Ator Primário Condutor (Driver)
2. Ator Secundário Conduzido (Driven)
3.
Lado Esquerdo do Hexágono
Atores primários (Drivers)
20
21
imagemporNetflixTechnologyBlog
https://netflixtechblog.com/ready-for-changes-with-hexagonal-architecture-b31
5ec967749
O lado esquerdo compreende o
lado permutável e fluído ao qual
um ator externo irá interagir com
a solução, o software. (realiza a
ação, dirige).
22
4.
Lado Direito do Hexágono
Atores secundários (Driven)
23
24
imagemporNetflixTechnologyBlog
https://netflixtechblog.com/ready-for-changes-with-hexagonal-architecture-b31
5ec967749
O lado direito compreende o lado
permutável e fluído que fornece
os serviços de infraestrutura e
interage com o banco de dados,
sistema de arquivos, etc (executa
uma ação, dirigido)
25
Portas
As portas como são chamadas, tem
exatamente essa função, ser responsável
pela comunicação de fora para dentro dos
lado esquerdo e direito para dentro do
centro do hexágono.
26
Na prática, as portas, são
frequentemente implementadas
como interfaces a serem usadas
por terceiros.
27
28
imagempordev.to-HexagonalArchitecture/PortsandAdapters
https://dev.to/jofisaes/hexagonal-architecture-ports-and-adapters-1h4m
Adaptadores
29
Os adaptadores são componentes de softwares
para que uma tecnologia externa possa
interagir com uma porta do centro hexágono.
Para cada tecnologia que for utilizar, deve ser
criado de adaptador que irá interagir com a
porta do hexágono.
Na prática, os adaptadores
são essencialmente a
implementação de portas.
30
31
imagempordev.to-HexagonalArchitecture/PortsandAdapters
https://dev.to/jofisaes/hexagonal-architecture-ports-and-adapters-1h4m
IoC (Inversion of Control)
Controle de inversão
32
é um Pattern que prega para usarmos o controle das instâncias de uma
determinada classe ser tratada externamente e não dentro da classe em
questão, ou seja, Inverter o controle de uma classe delegando para uma
outra classe, interface, componente, serviço, etc.
Pontos Positivos 😊
▷ Solução independente de frameworks
▷ Solução Independente de Serviços Externos
▷ Possível adiar algumas decisões técnicas
▷ Criação e substituição de adaptadores
▷ Facilidade em testar a aplicação.
▷ Facilidade na troca de tecnologias.
33
Pontos Negativos 😟
▷ Complexidade Extra
▷ Custo de criação e
manutenção.
▷ Não existe uma orientação
sobre organização de código
(diretórios, camadas)
34
Dicas
Projetos que fazem uso de regras de
negócio em banco de dados ou
“amarrados” a tecnologias de terceiros
ou proprietários não justifica o uso
dessa abordagem.
35
Projetos de médio e grande porte que tem
de longo ciclo de vida e precisam ser
modificados muitas vezes, principalmente
por crescimento e escalabilidade, além de
não serem amarrados com o frontend e nem
back services justificam o uso dessa
abordagem.
36
Arigatō gozaimasu!
Perguntas?
37
ありがとうございます
Referências e Links Úteis
38
Arquitetura Hexagonal com Java
https://www.udemy.com/course/arquitetura-hexagonal-com-java-1
Hexagonal architecture
https://alistair.cockburn.us/hexagonal-architecture
Alistair in the "Hexagone"
https://www.youtube.com/playlist?list=PLGl1Jc8ErU1w27y8-7Gdcloy1tHO7NriL
Arquitetura Hexagonal: O que você precisa saber
https://youtu.be/or5zAOASPjU
Arquitetura Hexagonal
https://fernandofranzini.wordpress.com/2019/04/09/arquitetura-hexagonal
DDD, Hexagonal, Onion, Clean, CQRS, … How I put it all together
https://herbertograca.com/2017/11/16/explicit-architecture-01-ddd-hexagonal-onion-clean-cqrs-
how-i-put-it-all-together
Referências e Links Úteis - Cont.
39
Entendendo a Separação de Conceitos
https://www.andrecelestino.com/entendendo-a-separacao-de-conceitos
Hexagonal Architecture
https://stefanoalletti.wordpress.com/2017/10/27/hexagonal-architecture
Ready for changes with Hexagonal Architecture
https://netflixtechblog.com/ready-for-changes-with-hexagonal-architecture-b315ec967749
Hexagonal Architecture Gitlab Code
https://gitlab.com/hexagonal-architecture-java
Hexagonal Architecture / Ports and Adapters
https://dev.to/jofisaes/hexagonal-architecture-ports-and-adapters-1h4m

Mais conteúdo relacionado

Mais procurados

Linguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesLinguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesOziel Moreira Neto
 
Treinamento de SQL Básico
Treinamento de SQL BásicoTreinamento de SQL Básico
Treinamento de SQL BásicoIgor Alves
 
React JS - Parte 1
React JS - Parte 1React JS - Parte 1
React JS - Parte 1Bruno Catão
 
Teste de Software Introdução à Qualidade
Teste de Software Introdução à Qualidade Teste de Software Introdução à Qualidade
Teste de Software Introdução à Qualidade Camilo Ribeiro
 
Exemplos de Design Patterns em Java
Exemplos de Design Patterns em JavaExemplos de Design Patterns em Java
Exemplos de Design Patterns em Javaalexmacedo
 
diagrama de componentes
diagrama de componentesdiagrama de componentes
diagrama de componenteselliando dias
 
Processo de Desenvolvimento de Software - Design de Software, Interface, Arqu...
Processo de Desenvolvimento de Software - Design de Software, Interface, Arqu...Processo de Desenvolvimento de Software - Design de Software, Interface, Arqu...
Processo de Desenvolvimento de Software - Design de Software, Interface, Arqu...Natanael Simões
 
TDD - Test Driven Development
TDD - Test Driven DevelopmentTDD - Test Driven Development
TDD - Test Driven DevelopmentElias Nogueira
 
Arquitetura de microsserviços
Arquitetura  de  microsserviçosArquitetura  de  microsserviços
Arquitetura de microsserviçosRaphael Almeida
 

Mais procurados (20)

JSP: Introdução Parte 1
JSP: Introdução Parte 1JSP: Introdução Parte 1
JSP: Introdução Parte 1
 
Linguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesLinguagem de Programação Java para Iniciantes
Linguagem de Programação Java para Iniciantes
 
Git e GitHub - Conceitos Básicos
Git e GitHub - Conceitos BásicosGit e GitHub - Conceitos Básicos
Git e GitHub - Conceitos Básicos
 
Padrões MVC
Padrões MVCPadrões MVC
Padrões MVC
 
Curso javascript básico
Curso javascript básicoCurso javascript básico
Curso javascript básico
 
Treinamento de SQL Básico
Treinamento de SQL BásicoTreinamento de SQL Básico
Treinamento de SQL Básico
 
React JS - Parte 1
React JS - Parte 1React JS - Parte 1
React JS - Parte 1
 
Padrões de Projeto
Padrões de ProjetoPadrões de Projeto
Padrões de Projeto
 
Aula 2 - Modelos de processos
Aula 2 -  Modelos de processosAula 2 -  Modelos de processos
Aula 2 - Modelos de processos
 
Aula javascript
Aula  javascriptAula  javascript
Aula javascript
 
Teste de Software Introdução à Qualidade
Teste de Software Introdução à Qualidade Teste de Software Introdução à Qualidade
Teste de Software Introdução à Qualidade
 
Aula01-JavaScript
Aula01-JavaScriptAula01-JavaScript
Aula01-JavaScript
 
Exemplos de Design Patterns em Java
Exemplos de Design Patterns em JavaExemplos de Design Patterns em Java
Exemplos de Design Patterns em Java
 
diagrama de componentes
diagrama de componentesdiagrama de componentes
diagrama de componentes
 
Processo de Desenvolvimento de Software - Design de Software, Interface, Arqu...
Processo de Desenvolvimento de Software - Design de Software, Interface, Arqu...Processo de Desenvolvimento de Software - Design de Software, Interface, Arqu...
Processo de Desenvolvimento de Software - Design de Software, Interface, Arqu...
 
UML - Casos de Uso
UML - Casos de UsoUML - Casos de Uso
UML - Casos de Uso
 
TDD - Test Driven Development
TDD - Test Driven DevelopmentTDD - Test Driven Development
TDD - Test Driven Development
 
Aula03 - JavaScript
Aula03 - JavaScriptAula03 - JavaScript
Aula03 - JavaScript
 
Uml
UmlUml
Uml
 
Arquitetura de microsserviços
Arquitetura  de  microsserviçosArquitetura  de  microsserviços
Arquitetura de microsserviços
 

Semelhante a Arquitetura Hexagonal: uma introdução

Desmistificando a IHC para programadores
Desmistificando a IHC para programadoresDesmistificando a IHC para programadores
Desmistificando a IHC para programadoresTalita Pagani
 
Captulo 8 prototipacao
Captulo 8 prototipacaoCaptulo 8 prototipacao
Captulo 8 prototipacaolua alves
 
Engenharia De Software e O Software Livre
Engenharia De Software e O Software LivreEngenharia De Software e O Software Livre
Engenharia De Software e O Software LivreFabio Sperotto
 
Palestra: A Melhor Maneira de Aprender, É Fazendo!
Palestra: A Melhor Maneira de Aprender, É Fazendo!Palestra: A Melhor Maneira de Aprender, É Fazendo!
Palestra: A Melhor Maneira de Aprender, É Fazendo!Andre Henrique
 
Kyrios: Infra-estrutura livre para desenvolvimento de software
Kyrios: Infra-estrutura livre para desenvolvimento de softwareKyrios: Infra-estrutura livre para desenvolvimento de software
Kyrios: Infra-estrutura livre para desenvolvimento de softwareFábio Nogueira de Lucena
 
Dev rioclaro gerenciando o ciclo de vida das suas aplicações em larga escal
Dev rioclaro   gerenciando o ciclo de vida das suas aplicações em larga escalDev rioclaro   gerenciando o ciclo de vida das suas aplicações em larga escal
Dev rioclaro gerenciando o ciclo de vida das suas aplicações em larga escalLuiz Guilherme Bauer Fraga Moreira
 
Palestra - Introdução a Robótica
Palestra - Introdução a RobóticaPalestra - Introdução a Robótica
Palestra - Introdução a RobóticaGustavo Avellar
 
Programação Oritentada a Aspecto
Programação Oritentada a AspectoProgramação Oritentada a Aspecto
Programação Oritentada a AspectoBenicio Ávila
 
Ágil e Arquitetura-Os Opostos se Atraem
Ágil e Arquitetura-Os Opostos se AtraemÁgil e Arquitetura-Os Opostos se Atraem
Ágil e Arquitetura-Os Opostos se AtraemCentus Consultoria
 
Design Patterns (MSDN Webcast)
Design Patterns (MSDN Webcast)Design Patterns (MSDN Webcast)
Design Patterns (MSDN Webcast)Giovanni Bassi
 
ENGENHARIA DE COMPUTAÇÃO E INTELIGÊNCIA ARTIFICIAL
ENGENHARIA DE COMPUTAÇÃO E INTELIGÊNCIA ARTIFICIALENGENHARIA DE COMPUTAÇÃO E INTELIGÊNCIA ARTIFICIAL
ENGENHARIA DE COMPUTAÇÃO E INTELIGÊNCIA ARTIFICIALActiveEon
 

Semelhante a Arquitetura Hexagonal: uma introdução (20)

Desmistificando a IHC para programadores
Desmistificando a IHC para programadoresDesmistificando a IHC para programadores
Desmistificando a IHC para programadores
 
Analise sistemas 02
Analise sistemas 02Analise sistemas 02
Analise sistemas 02
 
Captulo 8 prototipacao
Captulo 8 prototipacaoCaptulo 8 prototipacao
Captulo 8 prototipacao
 
Trabalho es prototipagem
Trabalho es   prototipagemTrabalho es   prototipagem
Trabalho es prototipagem
 
Aula02
Aula02Aula02
Aula02
 
Engenharia De Software e O Software Livre
Engenharia De Software e O Software LivreEngenharia De Software e O Software Livre
Engenharia De Software e O Software Livre
 
ava facul uva unijorge (146).pdf
ava facul uva unijorge (146).pdfava facul uva unijorge (146).pdf
ava facul uva unijorge (146).pdf
 
Palestra: A Melhor Maneira de Aprender, É Fazendo!
Palestra: A Melhor Maneira de Aprender, É Fazendo!Palestra: A Melhor Maneira de Aprender, É Fazendo!
Palestra: A Melhor Maneira de Aprender, É Fazendo!
 
Kyrios: Infra-estrutura livre para desenvolvimento de software
Kyrios: Infra-estrutura livre para desenvolvimento de softwareKyrios: Infra-estrutura livre para desenvolvimento de software
Kyrios: Infra-estrutura livre para desenvolvimento de software
 
Dev rioclaro gerenciando o ciclo de vida das suas aplicações em larga escal
Dev rioclaro   gerenciando o ciclo de vida das suas aplicações em larga escalDev rioclaro   gerenciando o ciclo de vida das suas aplicações em larga escal
Dev rioclaro gerenciando o ciclo de vida das suas aplicações em larga escal
 
Palestra - Introdução a Robótica
Palestra - Introdução a RobóticaPalestra - Introdução a Robótica
Palestra - Introdução a Robótica
 
ES - 02
ES - 02ES - 02
ES - 02
 
Programação Oritentada a Aspecto
Programação Oritentada a AspectoProgramação Oritentada a Aspecto
Programação Oritentada a Aspecto
 
Ágil e Arquitetura-Os Opostos se Atraem
Ágil e Arquitetura-Os Opostos se AtraemÁgil e Arquitetura-Os Opostos se Atraem
Ágil e Arquitetura-Os Opostos se Atraem
 
Dfd
DfdDfd
Dfd
 
Esboços na arquitetura de software
Esboços na arquitetura de softwareEsboços na arquitetura de software
Esboços na arquitetura de software
 
Ciclo desenvolvimento de sistemas
Ciclo desenvolvimento de sistemasCiclo desenvolvimento de sistemas
Ciclo desenvolvimento de sistemas
 
Design Patterns (MSDN Webcast)
Design Patterns (MSDN Webcast)Design Patterns (MSDN Webcast)
Design Patterns (MSDN Webcast)
 
Aula02.pptx
Aula02.pptxAula02.pptx
Aula02.pptx
 
ENGENHARIA DE COMPUTAÇÃO E INTELIGÊNCIA ARTIFICIAL
ENGENHARIA DE COMPUTAÇÃO E INTELIGÊNCIA ARTIFICIALENGENHARIA DE COMPUTAÇÃO E INTELIGÊNCIA ARTIFICIAL
ENGENHARIA DE COMPUTAÇÃO E INTELIGÊNCIA ARTIFICIAL
 

Mais de Morvana Bonin

Sistemas de Recomendação com Neo4j + Surprise
Sistemas de Recomendação com Neo4j + SurpriseSistemas de Recomendação com Neo4j + Surprise
Sistemas de Recomendação com Neo4j + SurpriseMorvana Bonin
 
Introdução a Machine Learning
Introdução a Machine LearningIntrodução a Machine Learning
Introdução a Machine LearningMorvana Bonin
 
Práticas Jedi eXtreme Programming
Práticas Jedi eXtreme ProgrammingPráticas Jedi eXtreme Programming
Práticas Jedi eXtreme ProgrammingMorvana Bonin
 
Css cascading style sheet
Css cascading style sheetCss cascading style sheet
Css cascading style sheetMorvana Bonin
 

Mais de Morvana Bonin (9)

Sistemas de Recomendação com Neo4j + Surprise
Sistemas de Recomendação com Neo4j + SurpriseSistemas de Recomendação com Neo4j + Surprise
Sistemas de Recomendação com Neo4j + Surprise
 
Talk conexao
Talk conexaoTalk conexao
Talk conexao
 
Introdução a Machine Learning
Introdução a Machine LearningIntrodução a Machine Learning
Introdução a Machine Learning
 
Oficina docker
Oficina dockerOficina docker
Oficina docker
 
Práticas Jedi eXtreme Programming
Práticas Jedi eXtreme ProgrammingPráticas Jedi eXtreme Programming
Práticas Jedi eXtreme Programming
 
A tríade do tempo
A tríade do tempoA tríade do tempo
A tríade do tempo
 
Css cascading style sheet
Css cascading style sheetCss cascading style sheet
Css cascading style sheet
 
Html
HtmlHtml
Html
 
Internet of Things
Internet of ThingsInternet of Things
Internet of Things
 

Arquitetura Hexagonal: uma introdução