Clean Architecture em Node JS Rodrigo Souza Software















































- Slides: 47
Clean Architecture em Node. JS
Rodrigo Souza Software Engineer @ Sami rasouza. com. br
Agenda 1 2 3 4 Arquitetura A Regra de Dependência Domínio App
ANTES DO CLEAN ARCHITECTURE Hexagonal Architecture Alistair Cockburn (2005) 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
Agenda 1 2 3 4 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, Mongo. DB connection, Io. C containers, etc.
infrastructure/config/bootstrap. j s
infrastructure/config/bootstrap. j s
infrastructure/database/schemas/User. j s
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/Users. Controller. 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/List. Users. js
application/use_cases/Get. User. js
application/use_cases/Create. User. js
Entities ● Objetos relacionados ao negócio ● Menos propensos a mudar ● Core: geralmente é o diferencial da aplicação
domain/User. js
Source: https: //herbertograca. com/2017/11/16/explicit-architecture-01 -ddd-hexagonal-onion-clean-cqrs-how-i-put-it-all-together/
Agenda 1 2 3 4 Arquitetura A Regra de Dependência Domínio App
Source: https: //medium. com/ingeniouslysimple/context-mapping-in-domain-driven-design-9063465 d 2 eb 8
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.
"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)
Como modelar o meu Context Map?
Source: https: //10 consulting. 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/
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
Source: https: //blog. carbonfive. com/ubiquitous-language-the-joy-of-naming/
Agenda 1 2 3 4 Arquitetura A Regra de Dependência Domínio App
Folder Structure Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco
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!