SlideShare uma empresa Scribd logo
Indo além do MVC
com Node.JS
by Gustavo S. Rodrigues (@gustavo_s_r)
Sobre o palestrante
Sou um arquiteto de soluções
apaixonado por linhas de códigos e
por problemas não convencionais.
Já atuei como executivo de contas,
analista de QA, analista de
requisitos, programador Front-end,
Programador Back-end,
Desenvolvedor Full-Stack e
Arquiteto de Soluções prestando
serviços para clientes como Porto
Seguro, Terra, Claro e Natura. Gustavo S. Rodrigues
Sobre o que falaremos?
Essa palestra tem o objetivo de
apresentar conceitos de construção
de aplicações escaláveis e de fácil
manutenção, aplicando padrões de
projetos conhecidos mas com
Node.js
Keep it simple
stupid
Um bom software não é aquele que
tem menos linhas de código, assim
como não é o que implementa
funções ou atribuições complexas.
Qual dessas estruturas encontramos mais
complexidade?
/models
/routes
/modules(ou libs)
index.js
config.js
middlewares.js
package.json
/configs/
/infraestructure/providers/{external_resources}
/infraestructure/adapters/
/domains/models/
/domains/repositories/
/domains/datasource.js
/http/controllers/
/http/middlewares/
/http/routes/
/modules/
index.js
package.json
?!
/configs/
/infraestructure/providers/{external_
resources}
/infraestructure/adapters/
/domains/models/
/domains/repositories/
/domains/datasource.js
/http/controllers/
/http/middlewares/
/http/routes/
/modules/
index.js
package.json
Don't repeat
yourself
Estruturas mal definidas ou muito
reduzidas tendem a trazer consigo mais
responsabilidades para um bloco de
código, e por sua vez gera uma curva
exponencial de complexidade, que
dificulta a sustentação desse projeto
Show me the code!
O Que são Repositories?
Repository
Um sistema com um modelo de domínio complexo geralmente se beneficia de uma camada, como a
fornecida pelo Data Mapper (165), que isola os objetos de domínio dos detalhes do código de acesso ao
banco de dados. Em tais sistemas, pode valer a pena construir outra camada de abstração sobre a
camada de mapeamento, onde o código de construção da consulta é concentrado. Isso se torna mais
importante quando há um grande número de classes de domínio ou consultas pesadas. Nesses casos,
especialmente, adicionar essa camada ajuda a minimizar a lógica de consulta duplicada. Um Repositório
medeia entre o domínio e as camadas de mapeamento de dados, agindo como uma coleção de objetos
de domínio na memória. Objetos clientes constroem especificações de consulta declarativamente e as
submetem ao Repositório para satisfação. Objetos podem ser adicionados e removidos do Repositório,
como eles podem de uma simples coleção de objetos, e o código de mapeamento encapsulado pelo
Repositório realizará as operações apropriadas nos bastidores. Conceitualmente, um Repositório
encapsula o conjunto de objetos persistidos em um armazenamento de dados e as operações
executadas sobre eles, fornecendo uma visão mais orientada a objeto da camada de persistência. O
Repository também suporta o objetivo de obter uma separação limpa e uma dependência unidirecional
entre o domínio e as camadas de mapeamento de dados. (Patterns of Enterprise Application Architecture,
Martin Fowler)
Separar a regra de abstração de dados das regras de
controle te traz a flexibilidade de em apenas um lugar
controlar os provedores de dados, tornando mais fácil
a implementação de uso de mais de uma modalidade
de banco de dados ou de implementação de cache de
dados, sem se preocupar com re-implementar isso em
todos os controllers.
Por que separar
camada de controller
das camadas de rota?
Temos a tendência natural de acreditar que controller
deve por si só resolver chamadas http, mas a partir
dos momento que sua aplicação pode ser invocada via
função Lambda por handler, ou que sua controller
pode ser invocada por uma instrução bash, você
começa a observar que o controller serve para tratar
regras de negócio, recebendo dados de entrada,
tratando-os e devolvendo algo, e é papel de quem o
implementa definir o protocolo de entrada e saída,
seja HTTP ou não.
Existem outros modelos?
Claro que sim, depende do tamanho e da
complexidade do sistema que você pretende
construir, o modelo anterior colocamos apenas
algumas camadas de apoio para suportar mudanças
de forma mais simples, mas existem modelos mais
granulares como o do próximo slide.
Modelos
ONION
https://medium.com/@domagojk/patterns-for-designing-flexible-
architecture-in-node-js-cqrs-es-onion-7eb10bbefe17
Modelos
ONION
https://medium.com/@Killavus/hexagonal-architecture-in-
javascript-applications-and-how-it-relates-to-flux-349616d1268d
Fazer simples é mais difícil do que sair implementado
código, mas o preço que se paga é gigantesco quando
seu projeto cresce!
E o que vem depois?
Não é possível implementar bons padrões de
arquitetura sem uma inteira remodelagem no seu
processo de delivery!
TDD ou BDD
Independente do conceito aplicado,
teste, faça sempre uma cobertura
de teste no mínimo de 80% da sua
aplicação, entre testes unitários e
end-to-end.
Automatize atualizações
Com uma boa cobertura de testes,
algumas coisas como atualização
de pacotes de forma automática
para garantir o uso dos módulos em
suas versões mais atualizadas e
seguras utilizando o Renovate Bot
(https://renovatebot.com/)
Garanta deploys seguros
Além de utilizar uma boa ferramenta
de CI/CI, é importante que além de
automatizar o processo de build,
que se automatize os testes, e mais
do que isso, que garanta que seu
projeto continue seguro.
Faça uma arquitetura de
referência
Mais importante que usar boas
práticas de desenvolvimento,
documente, crie boilerplates básicos
de implementações para reuso,
construa libs e mais do que isso,
compartilhe código com a
comunidade.
Onde Aprender mais sobre Good parts?
Links
12 Fator - https://12factor.net/pt_br/
System design primer - https://github.com/donnemartin/system-design-primer/
P of EAA - https://martinfowler.com/books/eaa.html
SOLID NODE - https://medium.com/@domagojk/patterns-for-designing-flexible-
architecture-in-node-js-cqrs-es-onion-7eb10bbefe17
Dúvidas?
Obrigado!
Medium: https://medium.com/@gustavosrodrigues
Twitter: @gustavo_s_r
Linkedin: https://www.linkedin.com/in/gustavosilvarodrigues/

Mais conteúdo relacionado

Mais procurados

BDD (Behavior-Driven Development) - Setembro/2015
BDD (Behavior-Driven Development) - Setembro/2015BDD (Behavior-Driven Development) - Setembro/2015
BDD (Behavior-Driven Development) - Setembro/2015
Renato Groff
 
O comparativo de arquiteturas de software monolíticas em relação a arquitetur...
O comparativo de arquiteturas de software monolíticas em relação a arquitetur...O comparativo de arquiteturas de software monolíticas em relação a arquitetur...
O comparativo de arquiteturas de software monolíticas em relação a arquitetur...
Emmanuel Neri
 
Apresentação Flisol 2016
Apresentação Flisol 2016Apresentação Flisol 2016
Apresentação Flisol 2016
Laryssa Muniz
 
TDC2016SP - Trilha Microservices
TDC2016SP - Trilha MicroservicesTDC2016SP - Trilha Microservices
TDC2016SP - Trilha Microservices
tdc-globalcode
 
BDD
BDDBDD
Estudo da aplicação da arquitetura orientada a serviços em um sistema de gest...
Estudo da aplicação da arquitetura orientada a serviços em um sistema de gest...Estudo da aplicação da arquitetura orientada a serviços em um sistema de gest...
Estudo da aplicação da arquitetura orientada a serviços em um sistema de gest...
Glauco Vinicius Argentino de Oliveira
 
Aplicação da arquitetura de micro serviços em softwares corporativos
Aplicação da arquitetura de micro serviços em softwares corporativosAplicação da arquitetura de micro serviços em softwares corporativos
Aplicação da arquitetura de micro serviços em softwares corporativos
Emmanuel Neri
 
Arquitetura e Integração de sistemas
Arquitetura e Integração de sistemasArquitetura e Integração de sistemas
Arquitetura e Integração de sistemas
Jether Rodrigues
 
JUGVale 14 - 14/09/2019
JUGVale 14 - 14/09/2019JUGVale 14 - 14/09/2019
JUGVale 14 - 14/09/2019
Jether Rodrigues
 
BDD com SpecFlow
BDD com SpecFlowBDD com SpecFlow
BDD com SpecFlow
Altamir Junior Dias
 
Estudo de caso ASP.NET MVC e Silverlight
Estudo de caso ASP.NET MVC e SilverlightEstudo de caso ASP.NET MVC e Silverlight
Estudo de caso ASP.NET MVC e Silverlight
Glauco Vinicius Argentino de Oliveira
 
Usando MVC para agilizar o desenvolvimento
Usando MVC para agilizar o desenvolvimentoUsando MVC para agilizar o desenvolvimento
Usando MVC para agilizar o desenvolvimento
Alexandre Andrade
 
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
César Augusto Pessôa
 
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Grupo Bandeirantes - ...
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Grupo Bandeirantes - ...Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Grupo Bandeirantes - ...
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Grupo Bandeirantes - ...
Renato Groff
 
Camadas
CamadasCamadas
Camadas
Sonia Góes
 
NoSql e NewSql
NoSql e NewSqlNoSql e NewSql
NoSql e NewSql
Suzana Viana Mota
 
TCC 1 - Um método para o desenvolvimento de software baseado em microserviços
TCC 1 - Um método para o desenvolvimento de software baseado em microserviçosTCC 1 - Um método para o desenvolvimento de software baseado em microserviços
TCC 1 - Um método para o desenvolvimento de software baseado em microserviços
Thiago Pereira
 
Architecture performance using micro services
Architecture performance using micro servicesArchitecture performance using micro services
Architecture performance using micro services
Joao Galdino Mello de Souza
 
Aula09 SD - Replicação e Consistência
Aula09 SD - Replicação e ConsistênciaAula09 SD - Replicação e Consistência
Aula09 SD - Replicação e Consistência
Messias Batista
 
03 - Aplicações web com ASP.net v1.0
03 - Aplicações web com ASP.net v1.003 - Aplicações web com ASP.net v1.0
03 - Aplicações web com ASP.net v1.0
César Augusto Pessôa
 

Mais procurados (20)

BDD (Behavior-Driven Development) - Setembro/2015
BDD (Behavior-Driven Development) - Setembro/2015BDD (Behavior-Driven Development) - Setembro/2015
BDD (Behavior-Driven Development) - Setembro/2015
 
O comparativo de arquiteturas de software monolíticas em relação a arquitetur...
O comparativo de arquiteturas de software monolíticas em relação a arquitetur...O comparativo de arquiteturas de software monolíticas em relação a arquitetur...
O comparativo de arquiteturas de software monolíticas em relação a arquitetur...
 
Apresentação Flisol 2016
Apresentação Flisol 2016Apresentação Flisol 2016
Apresentação Flisol 2016
 
TDC2016SP - Trilha Microservices
TDC2016SP - Trilha MicroservicesTDC2016SP - Trilha Microservices
TDC2016SP - Trilha Microservices
 
BDD
BDDBDD
BDD
 
Estudo da aplicação da arquitetura orientada a serviços em um sistema de gest...
Estudo da aplicação da arquitetura orientada a serviços em um sistema de gest...Estudo da aplicação da arquitetura orientada a serviços em um sistema de gest...
Estudo da aplicação da arquitetura orientada a serviços em um sistema de gest...
 
Aplicação da arquitetura de micro serviços em softwares corporativos
Aplicação da arquitetura de micro serviços em softwares corporativosAplicação da arquitetura de micro serviços em softwares corporativos
Aplicação da arquitetura de micro serviços em softwares corporativos
 
Arquitetura e Integração de sistemas
Arquitetura e Integração de sistemasArquitetura e Integração de sistemas
Arquitetura e Integração de sistemas
 
JUGVale 14 - 14/09/2019
JUGVale 14 - 14/09/2019JUGVale 14 - 14/09/2019
JUGVale 14 - 14/09/2019
 
BDD com SpecFlow
BDD com SpecFlowBDD com SpecFlow
BDD com SpecFlow
 
Estudo de caso ASP.NET MVC e Silverlight
Estudo de caso ASP.NET MVC e SilverlightEstudo de caso ASP.NET MVC e Silverlight
Estudo de caso ASP.NET MVC e Silverlight
 
Usando MVC para agilizar o desenvolvimento
Usando MVC para agilizar o desenvolvimentoUsando MVC para agilizar o desenvolvimento
Usando MVC para agilizar o desenvolvimento
 
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
 
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Grupo Bandeirantes - ...
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Grupo Bandeirantes - ...Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Grupo Bandeirantes - ...
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Grupo Bandeirantes - ...
 
Camadas
CamadasCamadas
Camadas
 
NoSql e NewSql
NoSql e NewSqlNoSql e NewSql
NoSql e NewSql
 
TCC 1 - Um método para o desenvolvimento de software baseado em microserviços
TCC 1 - Um método para o desenvolvimento de software baseado em microserviçosTCC 1 - Um método para o desenvolvimento de software baseado em microserviços
TCC 1 - Um método para o desenvolvimento de software baseado em microserviços
 
Architecture performance using micro services
Architecture performance using micro servicesArchitecture performance using micro services
Architecture performance using micro services
 
Aula09 SD - Replicação e Consistência
Aula09 SD - Replicação e ConsistênciaAula09 SD - Replicação e Consistência
Aula09 SD - Replicação e Consistência
 
03 - Aplicações web com ASP.net v1.0
03 - Aplicações web com ASP.net v1.003 - Aplicações web com ASP.net v1.0
03 - Aplicações web com ASP.net v1.0
 

Semelhante a Indo alem do_mvc_node_js

Workshop soa, microservices e devops
Workshop soa, microservices e devopsWorkshop soa, microservices e devops
Workshop soa, microservices e devops
Diego Pacheco
 
Treinamento ASP.NET 2014
Treinamento ASP.NET 2014Treinamento ASP.NET 2014
Treinamento ASP.NET 2014
Eric Gallardo
 
Arquitetura de sistemas web
Arquitetura de sistemas webArquitetura de sistemas web
Arquitetura de sistemas web
Opakus - Soluções Inteligentes
 
Microserviços - Universidade Metodista - EETI 2016
Microserviços - Universidade Metodista - EETI 2016Microserviços - Universidade Metodista - EETI 2016
Microserviços - Universidade Metodista - EETI 2016
Renato Groff
 
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
Ryan Padilha
 
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azure
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on AzureTDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azure
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azure
tdc-globalcode
 
Tdc Future 2021 - simples soluções grandes resultados - Márcio Rogério Nizzola
Tdc Future 2021 - simples soluções grandes resultados - Márcio Rogério NizzolaTdc Future 2021 - simples soluções grandes resultados - Márcio Rogério Nizzola
Tdc Future 2021 - simples soluções grandes resultados - Márcio Rogério Nizzola
Dextra Sistemas / Etec Itu
 
Devops: Gestão e publicação de Dados no SQL Server
Devops: Gestão e publicação de Dados no SQL ServerDevops: Gestão e publicação de Dados no SQL Server
Devops: Gestão e publicação de Dados no SQL Server
Igor Rosa Macedo
 
Microservices
MicroservicesMicroservices
Microservices
Rafael Sousa
 
Escalando apps com React e Type Script e SOLID
Escalando apps com React e Type Script e SOLIDEscalando apps com React e Type Script e SOLID
Escalando apps com React e Type Script e SOLID
Ruben Marcus Luz Paschoarelli
 
Clean Architecture
Clean ArchitectureClean Architecture
Clean Architecture
Rodrigo Branas
 
[DTC21] Thiago Lima - Do Zero ao 100 no Mundo de Microservices
[DTC21] Thiago Lima - Do Zero ao 100 no Mundo de Microservices[DTC21] Thiago Lima - Do Zero ao 100 no Mundo de Microservices
[DTC21] Thiago Lima - Do Zero ao 100 no Mundo de Microservices
Deep Tech Brasil
 
Arquitetura de Microserviços - Stone Tech Saturday - Março/2017
Arquitetura de Microserviços - Stone Tech Saturday - Março/2017Arquitetura de Microserviços - Stone Tech Saturday - Março/2017
Arquitetura de Microserviços - Stone Tech Saturday - Março/2017
Renato Groff
 
Aula sobre Sistemas Distribuidos Atualizado
Aula sobre Sistemas Distribuidos AtualizadoAula sobre Sistemas Distribuidos Atualizado
Aula sobre Sistemas Distribuidos Atualizado
GLAUCECARVALHO4
 
Microservices com Spring Boot e Spring Cloud Netflix
Microservices com Spring Boot e Spring Cloud NetflixMicroservices com Spring Boot e Spring Cloud Netflix
Microservices com Spring Boot e Spring Cloud Netflix
Natanael Fonseca
 
Microservices
MicroservicesMicroservices
Microservices
Renato Groff
 
Microservices - ALM Roadshow 2015
Microservices - ALM Roadshow 2015Microservices - ALM Roadshow 2015
Microservices - ALM Roadshow 2015
Renato Groff
 
MIT DevOps IaC - Infra como Código
MIT DevOps IaC - Infra como CódigoMIT DevOps IaC - Infra como Código
MIT DevOps IaC - Infra como Código
Caio Candido
 
Apresentacão Android Components - Programando em camadas
Apresentacão Android Components - Programando em camadasApresentacão Android Components - Programando em camadas
Apresentacão Android Components - Programando em camadas
Victor Aldir
 
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
 

Semelhante a Indo alem do_mvc_node_js (20)

Workshop soa, microservices e devops
Workshop soa, microservices e devopsWorkshop soa, microservices e devops
Workshop soa, microservices e devops
 
Treinamento ASP.NET 2014
Treinamento ASP.NET 2014Treinamento ASP.NET 2014
Treinamento ASP.NET 2014
 
Arquitetura de sistemas web
Arquitetura de sistemas webArquitetura de sistemas web
Arquitetura de sistemas web
 
Microserviços - Universidade Metodista - EETI 2016
Microserviços - Universidade Metodista - EETI 2016Microserviços - Universidade Metodista - EETI 2016
Microserviços - Universidade Metodista - EETI 2016
 
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
 
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azure
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on AzureTDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azure
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azure
 
Tdc Future 2021 - simples soluções grandes resultados - Márcio Rogério Nizzola
Tdc Future 2021 - simples soluções grandes resultados - Márcio Rogério NizzolaTdc Future 2021 - simples soluções grandes resultados - Márcio Rogério Nizzola
Tdc Future 2021 - simples soluções grandes resultados - Márcio Rogério Nizzola
 
Devops: Gestão e publicação de Dados no SQL Server
Devops: Gestão e publicação de Dados no SQL ServerDevops: Gestão e publicação de Dados no SQL Server
Devops: Gestão e publicação de Dados no SQL Server
 
Microservices
MicroservicesMicroservices
Microservices
 
Escalando apps com React e Type Script e SOLID
Escalando apps com React e Type Script e SOLIDEscalando apps com React e Type Script e SOLID
Escalando apps com React e Type Script e SOLID
 
Clean Architecture
Clean ArchitectureClean Architecture
Clean Architecture
 
[DTC21] Thiago Lima - Do Zero ao 100 no Mundo de Microservices
[DTC21] Thiago Lima - Do Zero ao 100 no Mundo de Microservices[DTC21] Thiago Lima - Do Zero ao 100 no Mundo de Microservices
[DTC21] Thiago Lima - Do Zero ao 100 no Mundo de Microservices
 
Arquitetura de Microserviços - Stone Tech Saturday - Março/2017
Arquitetura de Microserviços - Stone Tech Saturday - Março/2017Arquitetura de Microserviços - Stone Tech Saturday - Março/2017
Arquitetura de Microserviços - Stone Tech Saturday - Março/2017
 
Aula sobre Sistemas Distribuidos Atualizado
Aula sobre Sistemas Distribuidos AtualizadoAula sobre Sistemas Distribuidos Atualizado
Aula sobre Sistemas Distribuidos Atualizado
 
Microservices com Spring Boot e Spring Cloud Netflix
Microservices com Spring Boot e Spring Cloud NetflixMicroservices com Spring Boot e Spring Cloud Netflix
Microservices com Spring Boot e Spring Cloud Netflix
 
Microservices
MicroservicesMicroservices
Microservices
 
Microservices - ALM Roadshow 2015
Microservices - ALM Roadshow 2015Microservices - ALM Roadshow 2015
Microservices - ALM Roadshow 2015
 
MIT DevOps IaC - Infra como Código
MIT DevOps IaC - Infra como CódigoMIT DevOps IaC - Infra como Código
MIT DevOps IaC - Infra como Código
 
Apresentacão Android Components - Programando em camadas
Apresentacão Android Components - Programando em camadasApresentacão Android Components - Programando em camadas
Apresentacão Android Components - Programando em camadas
 
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...
 

Indo alem do_mvc_node_js

  • 1. Indo além do MVC com Node.JS by Gustavo S. Rodrigues (@gustavo_s_r)
  • 2. Sobre o palestrante Sou um arquiteto de soluções apaixonado por linhas de códigos e por problemas não convencionais. Já atuei como executivo de contas, analista de QA, analista de requisitos, programador Front-end, Programador Back-end, Desenvolvedor Full-Stack e Arquiteto de Soluções prestando serviços para clientes como Porto Seguro, Terra, Claro e Natura. Gustavo S. Rodrigues
  • 3. Sobre o que falaremos?
  • 4. Essa palestra tem o objetivo de apresentar conceitos de construção de aplicações escaláveis e de fácil manutenção, aplicando padrões de projetos conhecidos mas com Node.js
  • 6. Um bom software não é aquele que tem menos linhas de código, assim como não é o que implementa funções ou atribuições complexas.
  • 7. Qual dessas estruturas encontramos mais complexidade? /models /routes /modules(ou libs) index.js config.js middlewares.js package.json /configs/ /infraestructure/providers/{external_resources} /infraestructure/adapters/ /domains/models/ /domains/repositories/ /domains/datasource.js /http/controllers/ /http/middlewares/ /http/routes/ /modules/ index.js package.json ?!
  • 10. Estruturas mal definidas ou muito reduzidas tendem a trazer consigo mais responsabilidades para um bloco de código, e por sua vez gera uma curva exponencial de complexidade, que dificulta a sustentação desse projeto
  • 11. Show me the code!
  • 12. O Que são Repositories?
  • 13. Repository Um sistema com um modelo de domínio complexo geralmente se beneficia de uma camada, como a fornecida pelo Data Mapper (165), que isola os objetos de domínio dos detalhes do código de acesso ao banco de dados. Em tais sistemas, pode valer a pena construir outra camada de abstração sobre a camada de mapeamento, onde o código de construção da consulta é concentrado. Isso se torna mais importante quando há um grande número de classes de domínio ou consultas pesadas. Nesses casos, especialmente, adicionar essa camada ajuda a minimizar a lógica de consulta duplicada. Um Repositório medeia entre o domínio e as camadas de mapeamento de dados, agindo como uma coleção de objetos de domínio na memória. Objetos clientes constroem especificações de consulta declarativamente e as submetem ao Repositório para satisfação. Objetos podem ser adicionados e removidos do Repositório, como eles podem de uma simples coleção de objetos, e o código de mapeamento encapsulado pelo Repositório realizará as operações apropriadas nos bastidores. Conceitualmente, um Repositório encapsula o conjunto de objetos persistidos em um armazenamento de dados e as operações executadas sobre eles, fornecendo uma visão mais orientada a objeto da camada de persistência. O Repository também suporta o objetivo de obter uma separação limpa e uma dependência unidirecional entre o domínio e as camadas de mapeamento de dados. (Patterns of Enterprise Application Architecture, Martin Fowler)
  • 14. Separar a regra de abstração de dados das regras de controle te traz a flexibilidade de em apenas um lugar controlar os provedores de dados, tornando mais fácil a implementação de uso de mais de uma modalidade de banco de dados ou de implementação de cache de dados, sem se preocupar com re-implementar isso em todos os controllers.
  • 15. Por que separar camada de controller das camadas de rota?
  • 16. Temos a tendência natural de acreditar que controller deve por si só resolver chamadas http, mas a partir dos momento que sua aplicação pode ser invocada via função Lambda por handler, ou que sua controller pode ser invocada por uma instrução bash, você começa a observar que o controller serve para tratar regras de negócio, recebendo dados de entrada, tratando-os e devolvendo algo, e é papel de quem o implementa definir o protocolo de entrada e saída, seja HTTP ou não.
  • 18. Claro que sim, depende do tamanho e da complexidade do sistema que você pretende construir, o modelo anterior colocamos apenas algumas camadas de apoio para suportar mudanças de forma mais simples, mas existem modelos mais granulares como o do próximo slide.
  • 21. Fazer simples é mais difícil do que sair implementado código, mas o preço que se paga é gigantesco quando seu projeto cresce!
  • 22. E o que vem depois?
  • 23. Não é possível implementar bons padrões de arquitetura sem uma inteira remodelagem no seu processo de delivery!
  • 24. TDD ou BDD Independente do conceito aplicado, teste, faça sempre uma cobertura de teste no mínimo de 80% da sua aplicação, entre testes unitários e end-to-end.
  • 25. Automatize atualizações Com uma boa cobertura de testes, algumas coisas como atualização de pacotes de forma automática para garantir o uso dos módulos em suas versões mais atualizadas e seguras utilizando o Renovate Bot (https://renovatebot.com/)
  • 26. Garanta deploys seguros Além de utilizar uma boa ferramenta de CI/CI, é importante que além de automatizar o processo de build, que se automatize os testes, e mais do que isso, que garanta que seu projeto continue seguro.
  • 27. Faça uma arquitetura de referência Mais importante que usar boas práticas de desenvolvimento, documente, crie boilerplates básicos de implementações para reuso, construa libs e mais do que isso, compartilhe código com a comunidade.
  • 28. Onde Aprender mais sobre Good parts?
  • 29. Links 12 Fator - https://12factor.net/pt_br/ System design primer - https://github.com/donnemartin/system-design-primer/ P of EAA - https://martinfowler.com/books/eaa.html SOLID NODE - https://medium.com/@domagojk/patterns-for-designing-flexible- architecture-in-node-js-cqrs-es-onion-7eb10bbefe17