Clean Architecture em Node JS Rodrigo Souza Software

  • Slides: 47
Download presentation
Clean Architecture em Node. JS

Clean Architecture em Node. JS

Rodrigo Souza Software Engineer @ Sami rasouza. com. br

Rodrigo Souza Software Engineer @ Sami rasouza. com. br

Agenda 1 2 3 4 Arquitetura A Regra de Dependência Domínio App

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)

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

"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 ●

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

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

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

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/config/bootstrap. j s

infrastructure/config/bootstrap. j s

infrastructure/database/schemas/User. j s

infrastructure/database/schemas/User. j s

Interface and Adapters ● Camada de tradução entre a infraestrutura e as entidades e

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/routers. js

ports/http/Users. Controller. js

ports/http/Users. Controller. js

ports/http/errors. js

ports/http/errors. js

Use Cases ● Regra de negócio específica da aplicação ● Maior tempo de desenvolvimento

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/List. Users. js

application/use_cases/Get. User. js

application/use_cases/Get. User. js

application/use_cases/Create. User. js

application/use_cases/Create. User. js

Entities ● Objetos relacionados ao negócio ● Menos propensos a mudar ● Core: geralmente

Entities ● Objetos relacionados ao negócio ● Menos propensos a mudar ● Core: geralmente é o diferencial da aplicação

domain/User. js

domain/User. js

Source: https: //herbertograca. com/2017/11/16/explicit-architecture-01 -ddd-hexagonal-onion-clean-cqrs-how-i-put-it-all-together/

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

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

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

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

"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?

Como modelar o meu Context Map?

Source: https: //10 consulting. com/2019/05/02/domain-driven-design-and-event-storming-workshop/

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: //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: //en. wikipedia. org/wiki/Event_storming

Source: https: //tekaris. com/blog/introduction-ubiquitous-language/

Source: https: //tekaris. com/blog/introduction-ubiquitous-language/

Ubiquitous Language ● Definição: uma linguagem única universal compartilhada pelo time, desenvolvedores, domain experts

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/

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

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

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

Bibliografia

https: //github. com/rasouza/node-clean-architecture

https: //github. com/rasouza/node-clean-architecture

Clean Architecture: A Craftsman's Guide to Software Structure and Design Robert C. Martin

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: Tackling Complexity in the Heart of Software Eric Evans

Domain-Driven Design Distilled Vaughn Vernon

Domain-Driven Design Distilled Vaughn Vernon

Design It!: From Programmer to Software Architect Michael Keeling

Design It!: From Programmer to Software Architect Michael Keeling

Artigos

Artigos

Arquitetura ● Descomplicando a Clean Architecture - Luiza Labs ● DDD, Hexagonal, Onion, Clean,

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 ●

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!

Muito Obrigado! We're hiring!