Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Clean Architecture em NodeJS

Clean Architecture em NodeJS

Durante os últimos anos vimos toda uma gama de ideias sobre arquitetura de sistemas, algumas delas como Hexagonal Architecture (Alistair Cockburn) , Onion Model (Jeffrey Palermo), DCI (James Coplien). Apesar de serem diferente em seus detalhes, todas possuem um único objetivo: separação de responsabilidades.

Nessa talk iremos dissecar o modelo proposto por Robert C. Martin (conhecido por Uncle Bob) passando pelos principais conceitos como a Regra de Dependência, Use Cases, Entities e Adapters, utilizando uma REST API simples e entender porque essa arquitetura vem ganhando fama nos últimos tempos.

Rodrigo Souza

October 29, 2020
Tweet

More Decks by Rodrigo Souza

Other Decks in Programming

Transcript

  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)
  2. "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)
  3. 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.
  4. 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.
  5. 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
  6. Entities • Objetos relacionados ao negócio • Menos propensos a

    mudar • Core: geralmente é o diferencial da aplicação
  7. "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)
  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.
  9. 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
  10. 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
  11. 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