SlideShare uma empresa Scribd logo
1 de 46
Clean Architecture em NodeJS
Rodrigo Souza
Software Engineer @ Sami
rasouza
rasouza
rasouza.com.br
43
Agenda
Arquitetura
A Regra de
Dependência
2
Domínio App
1
Hexagonal Architecture
Alistair Cockburn (2005)
ANTES DO
CLEAN ARCHITECTURE
Onion Architecture
Jeffrey Palermo (2008)
DCI (Data, Context, Interaction)
James O. Coplien (2010)
Screaming Architecture
Robert C. Martin (2011)
"Uma boa arquitetura torna o sistema fácil de entender, desenvolver, manter e
implantar. O objetivo final é minimizar o custo da vida útil do sistema e maximizar
a produtividade do programador."
Robert C. Martin (Clean Architecture)
Clean Architecture
● Independente de Framework, UI, DB e agentes externos
● Testável
● SOLID
21 43
Agenda
Arquitetura
A Regra de
Dependência
Domínio App
Source: https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html
Frameworks and Drivers
● Camada mais externa
● Pouco código (glue code)
● Detalhes (código de baixo risco)
● Express.js bootstrap, MongoDB connection,
IoC containers, etc.
infrastructure/config/bootstrap.js
infrastructure/config/bootstrap.js
infrastructure/database/schemas/User.js
Interface and Adapters
● Camada de tradução entre a infraestrutura e
as entidades e use cases
● Formato mais conveniente possível para os
clientes externos e internos
● Presenters, models, views, controllers, etc.
ports/http/routers.js
ports/http/UsersController.js
ports/http/errors.js
Use Cases
● Regra de negócio específica da aplicação
● Maior tempo de desenvolvimento desprendido
● Mudanças das camadas externas não afetam essa camada
(e vice-versa)
● Mudanças nos detalhes da operação modificam a camada
application/use_cases/ListUsers.js
application/use_cases/GetUser.js
application/use_cases/CreateUser.js
Entities
● Objetos relacionados ao negócio
● Menos propensos a mudar
● Core: geralmente é o diferencial da aplicação
domain/User.js
21 43
Agenda
Arquitetura
A Regra de
Dependência
Domínio App
"Organizações que desenvolvem sistemas de software tendem a produzir
sistemas que são cópias das estruturas de comunicação dessas organizações."
Melvin E. Conway (Abril de 1968)
Source: https://medium.com/ingeniouslysimple/context-mapping-in-domain-driven-design-9063465d2eb8
Context Map
● Definição: uma ferramenta visual para identificar as
relações entre Bounded Contexts
● Compartilhar conhecimento (documentação)
● Features, clientes, eventos, dependências externas,
oportunidades de melhoria, etc.
Como modelar o meu Context Map?
Source: https://10consulting.com/2019/05/02/domain-driven-design-and-event-storming-workshop/
Source: https://thephp.cc/dates/2020/06/dutch-php-conference-online-edition/efficient-domain-driven-design-with-event-storming
Source: https://en.wikipedia.org/wiki/Event_storming
Source: https://tekaris.com/blog/introduction-ubiquitous-language/
Source: https://blog.carbonfive.com/ubiquitous-language-the-joy-of-naming/
Ubiquitous Language
● Definição: uma linguagem única universal compartilhada
pelo time, desenvolvedores, domain experts e stakeholders
● Expressada em termos do modelo de domínio
● Elimina contradições e ambiguidades
● Evolui com o tempo
3 421
Agenda
Arquitetura
A Regra de
Dependência
Domínio App
Folder Structure
Bibliografia
https://github.com/rasouza/node-clean-architecture
Clean Architecture: A Craftsman's Guide
to Software Structure and Design
Robert C. Martin
Domain-Driven Design: Tackling
Complexity in the Heart of Software
Eric Evans
Domain-Driven Design Distilled
Vaughn Vernon
Design It!: From Programmer to Software
Architect
Michael Keeling
Artigos
Arquitetura
● Descomplicando a Clean Architecture - Luiza Labs
● DDD, Hexagonal, Onion, Clean, CQRS, … How I put it all
together - Herberto Graça
● The Clean Architecture - Robert C. Martin
Domain Driven Design
● Domain-driven design and event storming workshop - Binary
Consulting
● Developing the ubiquitous language - Felipe de Freitas Batista
● Context mapping in Domain Driven Design - Redgate
Muito
Obrigado!
We're hiring!

Mais conteúdo relacionado

Mais procurados

Latinoware 2019 - Kubernetes a plataforma de grandes ideias
Latinoware 2019 - Kubernetes a plataforma de grandes ideiasLatinoware 2019 - Kubernetes a plataforma de grandes ideias
Latinoware 2019 - Kubernetes a plataforma de grandes ideiasRaul Leite
 
Atualizando versões de API externas sem medo
Atualizando versões de API externas sem medo Atualizando versões de API externas sem medo
Atualizando versões de API externas sem medo Alisson Bruno
 
Atualizando versões de API externas sem medo - TDC-SP 2018
Atualizando versões de API externas sem medo - TDC-SP 2018Atualizando versões de API externas sem medo - TDC-SP 2018
Atualizando versões de API externas sem medo - TDC-SP 2018Bruno Tanoue
 
Padrões de deploy para DevOps e Entrega Contínua, por Danilo Sato
Padrões de deploy para DevOps e Entrega Contínua, por Danilo SatoPadrões de deploy para DevOps e Entrega Contínua, por Danilo Sato
Padrões de deploy para DevOps e Entrega Contínua, por Danilo SatoThoughtworks
 
Learn about Git - Git Tutorial
Learn about Git - Git TutorialLearn about Git - Git Tutorial
Learn about Git - Git TutorialLucas Brigida
 
Selenium renato groffe + milton camara - mvp conf latam 2019
Selenium  renato groffe + milton camara - mvp conf latam 2019Selenium  renato groffe + milton camara - mvp conf latam 2019
Selenium renato groffe + milton camara - mvp conf latam 2019Milton Camara Gomes
 
Microsoft Operations Management Suite - OMS
Microsoft Operations Management Suite - OMSMicrosoft Operations Management Suite - OMS
Microsoft Operations Management Suite - OMSCDS
 
São Paulo MuleSoft Meetup - Unwired API Led & Custom Polices
São Paulo MuleSoft Meetup - Unwired API Led & Custom PolicesSão Paulo MuleSoft Meetup - Unwired API Led & Custom Polices
São Paulo MuleSoft Meetup - Unwired API Led & Custom PolicesGuilherme Pereira Silva
 
Agile Tester – a importância da automação dos testes no DevOps - Sidnei Eiji ...
Agile Tester – a importância da automação dos testes no DevOps - Sidnei Eiji ...Agile Tester – a importância da automação dos testes no DevOps - Sidnei Eiji ...
Agile Tester – a importância da automação dos testes no DevOps - Sidnei Eiji ...Agile Trends
 
Arquitetura para entrega continua
Arquitetura para entrega continuaArquitetura para entrega continua
Arquitetura para entrega continuaLeonardo Kobus
 
Publicando WSO2 API Manager no Kubernetes (Portuguese)
Publicando WSO2 API Manager no Kubernetes (Portuguese)Publicando WSO2 API Manager no Kubernetes (Portuguese)
Publicando WSO2 API Manager no Kubernetes (Portuguese)WSO2
 
Containers e DevOps
Containers e DevOps Containers e DevOps
Containers e DevOps Raul Leite
 
Throughput, escalabilidade e distribuição global com Cosmos DB
Throughput, escalabilidade e distribuição global com Cosmos DBThroughput, escalabilidade e distribuição global com Cosmos DB
Throughput, escalabilidade e distribuição global com Cosmos DBVinicius Quaiato
 
Engenharia ágil de ponta a ponta do clone ao deploy
Engenharia ágil de ponta a ponta do clone ao deployEngenharia ágil de ponta a ponta do clone ao deploy
Engenharia ágil de ponta a ponta do clone ao deployGiovanni Bassi
 

Mais procurados (20)

Latinoware 2019 - Kubernetes a plataforma de grandes ideias
Latinoware 2019 - Kubernetes a plataforma de grandes ideiasLatinoware 2019 - Kubernetes a plataforma de grandes ideias
Latinoware 2019 - Kubernetes a plataforma de grandes ideias
 
Atualizando versões de API externas sem medo
Atualizando versões de API externas sem medo Atualizando versões de API externas sem medo
Atualizando versões de API externas sem medo
 
Atualizando versões de API externas sem medo - TDC-SP 2018
Atualizando versões de API externas sem medo - TDC-SP 2018Atualizando versões de API externas sem medo - TDC-SP 2018
Atualizando versões de API externas sem medo - TDC-SP 2018
 
Padrões de deploy para DevOps e Entrega Contínua, por Danilo Sato
Padrões de deploy para DevOps e Entrega Contínua, por Danilo SatoPadrões de deploy para DevOps e Entrega Contínua, por Danilo Sato
Padrões de deploy para DevOps e Entrega Contínua, por Danilo Sato
 
Workshop - Jenkins
Workshop - JenkinsWorkshop - Jenkins
Workshop - Jenkins
 
BlingTech - Gitlab
BlingTech - GitlabBlingTech - Gitlab
BlingTech - Gitlab
 
Learn about Git - Git Tutorial
Learn about Git - Git TutorialLearn about Git - Git Tutorial
Learn about Git - Git Tutorial
 
Selenium renato groffe + milton camara - mvp conf latam 2019
Selenium  renato groffe + milton camara - mvp conf latam 2019Selenium  renato groffe + milton camara - mvp conf latam 2019
Selenium renato groffe + milton camara - mvp conf latam 2019
 
São Paulo MuleSoft Meetups - DevOps
São Paulo MuleSoft Meetups - DevOpsSão Paulo MuleSoft Meetups - DevOps
São Paulo MuleSoft Meetups - DevOps
 
Microsoft Operations Management Suite - OMS
Microsoft Operations Management Suite - OMSMicrosoft Operations Management Suite - OMS
Microsoft Operations Management Suite - OMS
 
São Paulo MuleSoft Meetup - Unwired API Led & Custom Polices
São Paulo MuleSoft Meetup - Unwired API Led & Custom PolicesSão Paulo MuleSoft Meetup - Unwired API Led & Custom Polices
São Paulo MuleSoft Meetup - Unwired API Led & Custom Polices
 
Agile Tester – a importância da automação dos testes no DevOps - Sidnei Eiji ...
Agile Tester – a importância da automação dos testes no DevOps - Sidnei Eiji ...Agile Tester – a importância da automação dos testes no DevOps - Sidnei Eiji ...
Agile Tester – a importância da automação dos testes no DevOps - Sidnei Eiji ...
 
Arquitetura para entrega continua
Arquitetura para entrega continuaArquitetura para entrega continua
Arquitetura para entrega continua
 
12 factor app
12 factor app12 factor app
12 factor app
 
Publicando WSO2 API Manager no Kubernetes (Portuguese)
Publicando WSO2 API Manager no Kubernetes (Portuguese)Publicando WSO2 API Manager no Kubernetes (Portuguese)
Publicando WSO2 API Manager no Kubernetes (Portuguese)
 
Containers e DevOps
Containers e DevOps Containers e DevOps
Containers e DevOps
 
[TDC-Arquitetura Java] Pastoreando Gatos
[TDC-Arquitetura Java] Pastoreando Gatos[TDC-Arquitetura Java] Pastoreando Gatos
[TDC-Arquitetura Java] Pastoreando Gatos
 
Throughput, escalabilidade e distribuição global com Cosmos DB
Throughput, escalabilidade e distribuição global com Cosmos DBThroughput, escalabilidade e distribuição global com Cosmos DB
Throughput, escalabilidade e distribuição global com Cosmos DB
 
GitHub Actions
GitHub ActionsGitHub Actions
GitHub Actions
 
Engenharia ágil de ponta a ponta do clone ao deploy
Engenharia ágil de ponta a ponta do clone ao deployEngenharia ágil de ponta a ponta do clone ao deploy
Engenharia ágil de ponta a ponta do clone ao deploy
 

Semelhante a Clean Architecture em NodeJS

TDC2016POA | Trilha Arquetetura - Revitalizando aplicações desktop usando Ce...
TDC2016POA | Trilha Arquetetura -  Revitalizando aplicações desktop usando Ce...TDC2016POA | Trilha Arquetetura -  Revitalizando aplicações desktop usando Ce...
TDC2016POA | Trilha Arquetetura - Revitalizando aplicações desktop usando Ce...tdc-globalcode
 
TDC2016SP Trilha Arquitetura.NET - Revitalizando aplicações desktop usando C...
TDC2016SP  Trilha Arquitetura.NET - Revitalizando aplicações desktop usando C...TDC2016SP  Trilha Arquitetura.NET - Revitalizando aplicações desktop usando C...
TDC2016SP Trilha Arquitetura.NET - Revitalizando aplicações desktop usando C...Marcelo Palladino
 
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
 
RedGate .NET Reflector
RedGate .NET ReflectorRedGate .NET Reflector
RedGate .NET ReflectorNuno Gomes
 
Microsoft research e inovação
Microsoft research e inovaçãoMicrosoft research e inovação
Microsoft research e inovaçãoVitor Ciaramella
 
Seminário - Arquitetura de software para computação ubíqua
Seminário - Arquitetura de software para computação ubíquaSeminário - Arquitetura de software para computação ubíqua
Seminário - Arquitetura de software para computação ubíquaRubens Matos Junior
 
TDC2016SP - Revitalizando aplicações desktop usando CefGlue, MessageBus e Rea...
TDC2016SP - Revitalizando aplicações desktop usando CefGlue, MessageBus e Rea...TDC2016SP - Revitalizando aplicações desktop usando CefGlue, MessageBus e Rea...
TDC2016SP - Revitalizando aplicações desktop usando CefGlue, MessageBus e Rea...tdc-globalcode
 
Arquitetura de Software
Arquitetura de SoftwareArquitetura de Software
Arquitetura de Softwareeros.viggiano
 
Model Driven RichUbi - A Model-Driven Process to Construct Rich Interfaces fo...
Model Driven RichUbi - A Model-Driven Process to Construct Rich Interfaces fo...Model Driven RichUbi - A Model-Driven Process to Construct Rich Interfaces fo...
Model Driven RichUbi - A Model-Driven Process to Construct Rich Interfaces fo...Luciana Zaina
 
Openday PUC-RIO - Ferramenta gráfica para modelagem e análise em Engenharia E...
Openday PUC-RIO - Ferramenta gráfica para modelagem e análise em Engenharia E...Openday PUC-RIO - Ferramenta gráfica para modelagem e análise em Engenharia E...
Openday PUC-RIO - Ferramenta gráfica para modelagem e análise em Engenharia E...Opencadd Advanced Technology
 
Plataforma Android: Produtividade Além do SDK
Plataforma Android: Produtividade Além do SDKPlataforma Android: Produtividade Além do SDK
Plataforma Android: Produtividade Além do SDKRyan Padilha
 
O uso de softwares na engenharia civil
O uso de softwares na engenharia civilO uso de softwares na engenharia civil
O uso de softwares na engenharia civildebvieir
 
Fundamentos do .NET Framework - Parte 1
Fundamentos do .NET Framework - Parte 1Fundamentos do .NET Framework - Parte 1
Fundamentos do .NET Framework - Parte 1Julian Correa
 
Design de Interfaces
Design de InterfacesDesign de Interfaces
Design de InterfacesAna Migowski
 
01 - Introdução a programação para internet v1.1
01 - Introdução a programação para internet v1.101 - Introdução a programação para internet v1.1
01 - Introdução a programação para internet v1.1César Augusto Pessôa
 

Semelhante a Clean Architecture em NodeJS (20)

ArquiteturaSoftware
ArquiteturaSoftwareArquiteturaSoftware
ArquiteturaSoftware
 
TDC2016POA | Trilha Arquetetura - Revitalizando aplicações desktop usando Ce...
TDC2016POA | Trilha Arquetetura -  Revitalizando aplicações desktop usando Ce...TDC2016POA | Trilha Arquetetura -  Revitalizando aplicações desktop usando Ce...
TDC2016POA | Trilha Arquetetura - Revitalizando aplicações desktop usando Ce...
 
TDC2016SP Trilha Arquitetura.NET - Revitalizando aplicações desktop usando C...
TDC2016SP  Trilha Arquitetura.NET - Revitalizando aplicações desktop usando C...TDC2016SP  Trilha Arquitetura.NET - Revitalizando aplicações desktop usando C...
TDC2016SP Trilha Arquitetura.NET - Revitalizando aplicações desktop usando C...
 
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
 
RedGate .NET Reflector
RedGate .NET ReflectorRedGate .NET Reflector
RedGate .NET Reflector
 
Microsoft research e inovação
Microsoft research e inovaçãoMicrosoft research e inovação
Microsoft research e inovação
 
Seminário - Arquitetura de software para computação ubíqua
Seminário - Arquitetura de software para computação ubíquaSeminário - Arquitetura de software para computação ubíqua
Seminário - Arquitetura de software para computação ubíqua
 
TDC2016SP - Revitalizando aplicações desktop usando CefGlue, MessageBus e Rea...
TDC2016SP - Revitalizando aplicações desktop usando CefGlue, MessageBus e Rea...TDC2016SP - Revitalizando aplicações desktop usando CefGlue, MessageBus e Rea...
TDC2016SP - Revitalizando aplicações desktop usando CefGlue, MessageBus e Rea...
 
Clean Architecture
Clean ArchitectureClean Architecture
Clean Architecture
 
Arquitetura de Software
Arquitetura de SoftwareArquitetura de Software
Arquitetura de Software
 
Esboços na arquitetura de software
Esboços na arquitetura de softwareEsboços na arquitetura de software
Esboços na arquitetura de software
 
Introdução aos Padrões Web e Tecnologias para o Ambiente Digital - Aula 02 - ...
Introdução aos Padrões Web e Tecnologias para o Ambiente Digital - Aula 02 - ...Introdução aos Padrões Web e Tecnologias para o Ambiente Digital - Aula 02 - ...
Introdução aos Padrões Web e Tecnologias para o Ambiente Digital - Aula 02 - ...
 
Model Driven RichUbi - A Model-Driven Process to Construct Rich Interfaces fo...
Model Driven RichUbi - A Model-Driven Process to Construct Rich Interfaces fo...Model Driven RichUbi - A Model-Driven Process to Construct Rich Interfaces fo...
Model Driven RichUbi - A Model-Driven Process to Construct Rich Interfaces fo...
 
Openday PUC-RIO - Ferramenta gráfica para modelagem e análise em Engenharia E...
Openday PUC-RIO - Ferramenta gráfica para modelagem e análise em Engenharia E...Openday PUC-RIO - Ferramenta gráfica para modelagem e análise em Engenharia E...
Openday PUC-RIO - Ferramenta gráfica para modelagem e análise em Engenharia E...
 
TEES - Apresentacao Final
TEES - Apresentacao FinalTEES - Apresentacao Final
TEES - Apresentacao Final
 
Plataforma Android: Produtividade Além do SDK
Plataforma Android: Produtividade Além do SDKPlataforma Android: Produtividade Além do SDK
Plataforma Android: Produtividade Além do SDK
 
O uso de softwares na engenharia civil
O uso de softwares na engenharia civilO uso de softwares na engenharia civil
O uso de softwares na engenharia civil
 
Fundamentos do .NET Framework - Parte 1
Fundamentos do .NET Framework - Parte 1Fundamentos do .NET Framework - Parte 1
Fundamentos do .NET Framework - Parte 1
 
Design de Interfaces
Design de InterfacesDesign de Interfaces
Design de Interfaces
 
01 - Introdução a programação para internet v1.1
01 - Introdução a programação para internet v1.101 - Introdução a programação para internet v1.1
01 - Introdução a programação para internet v1.1
 

Clean Architecture em NodeJS

Notas do Editor

  1. Modelo proposto em 2012 Objetivo melhorar a maneira que escrevemos e organizamos software Principios SOLID
  2. Disponibilizar os slides
  3. Termos práticos
  4. A ideia é impactar o business!
  5. Dependency Rule Entities Use Case Interface Adapters Frameworks and Drivers
  6. Inversion of Control
  7. Ubiquitous Language Context Map
  8. https://github.com/rasouza/node-clean-architecture
  9. Mostrar o IoC
  10. https://github.com/rasouza/node-clean-architecture