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!

Clean architecture em NodeJS

Notas do Editor

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