SlideShare uma empresa Scribd logo
Quanto isso pode ajudar?
ARQUITETURA EM CAMADAS
EM PYTHON
ITENS QUE VEREMOS SOBRE ESSE ASSUNTO
⇝ O que é arquitetura em camadas;
⇝ Pensar em camadas ainda é importante?
⇝ Aplicando uso de camadas em Python;
⇝ Padrões de projetos, como eles ajudam a ter camadas;
⇝ Quais vantagens e desvantagens?
⇝ Um caso real do uso de camadas.
o que é
arquitetura
em camadas ?
É UM ESTILO ARQUITETURAL
QUE PROPÕE DIVIDIR UM
SISTEMA EM VÁRIAS
CAMADAS DE ACORDO COM
A RESPONSABILIDADE DE
CADA PARTE DO SOFTWARE.
ESSE ESTILO PROPÕE QUE:
⇝ AS CAMADAS TENHAM UM
PROPÓSITO BEM DEFINIDO;
⇝ CADA CAMADA CONHEÇA APENAS
CAMADAS ABAIXO DELA;
⇝ AS CAMADAS POSSAM SER
REAPROVEITÁVEIS.
UM DESENHO TRADICIONAL DE CAMADAS...
O USO DE CAMADAS EM
SOFTWARE GANHOU FORÇA
NA DÉCADA DE 90, COM USO
DE 2 CAMADAS.
LOGO DEPOIS GANHOU MAIS
POPULARIDADE COM O USO
DE 3 CAMADAS.
O CONCEITO NÃO NASCEU
NO MUNDO DE SOFTWARE,
OUTRAS ÁREAS O USAM HÁ
MUITO TEMPO!
E NO MUNDO DE SOFTWARE
ELE TAMBÉM É APLICADO HÁ
MAIS TEMPO DO QUE
PARECE.
MODELO OSI SISTEMAS
OPERACIONAIS
DOCKER
E…
NA MINHA APLICAÇÃO
PENSAR EM CAMADAS
AINDA É
IMPORTANTE?
⇝ MESMO COM ARQUITETURA
ORIENTADA A SERVIÇOS?
⇝ MESMO COM MICRO-SERVIÇOS ?
⇝ MESMO COM CLOUD?
DEVEMOS AINDA TER QUE
PENSAR EM CAMADAS?
SIM !!!
VOCÊ PODE NÃO SABER OU ATÉ NÃO QUERER,
MAS GERALMENTE SUA APLICAÇÃO ESTÁ EM CAMADAS !!!
WEB
APP
MOBILE
APP
DATABASE
CONTROLLERS
REST
DOMAIN
SERVICE
REPOSITORY
MODEL
RELATIONAL NOSQL
EXTERNAL SERVICES
REST
SERVICES
MESSAGE
QUEUE
OTHERS
FRONT BACK
E COMO POSSO APLICAR
CAMADAS EM PYTHON ?
VAMOS USAR UM EXEMPLO !.
apenas backend .
Um projeto simples, chamado:
Quotes Box
(Caixinha de Citações)
que usa os frameworks:
Flask e SQLAlchemy
Telas administrativas...
API Rest...
O projeto tem...
O projeto começa pequeno.
Mas, o projeto cresce um pouco...
E... o projeto cresce mais ainda...
o projeto é dividido em camadas!
O fonte é dividido em vários arquivos .py...
pronto, o projeto está usando
arquitetura em camadas !!!
só que não ! E PORQUE ?
novos recursos são necessários…
⇝ Executar processos agendados (cron);
⇝ Suportar volume alto de requisições;
⇝ Trabalhar com outros bancos de dados;
dificuldades na implementação surgem…
⇝ Com mais desenvolvedores há conflitos na codificação;
⇝ Fazer testes está cada vez mais difícil;
⇝ ...
eu consigo ____ ?
⇝ Executar rotinas de negócio sem usar API rest...
⇝ Trocar de forma fácil meu framework que expõe rest...
⇝ Optar por salvar os dados em nosql ou relacional...
⇝ Aplicar testes a partes específicas de forma simples...
⇝ Dividir o trabalho entre o time sem gerar conflito...
⇝ Evoluir o sistema sem precisar refatorar tudo...
e.. diante disso, nos perguntamos:
o que pode ser feito para
realmente usar camadas no
projeto?
Comece separando em pacotes, representando as camadas.
Projeto Único
quote-box-core==1.0.0
Projeto Core Projeto App
Ou
Tenha cuidado com dependência entre camadas
Camada domain não
deveria conhecer coisas da
camada acima
Usando apenas SQLAlchemy
⇝ A falta de tipagem facilita esperar atributos da camada de
cima que não fazem parte do modelo da camada em questão;
⇝ Métodos decorrentes de necessidades da camada de cima,
como: to_json(), json();
⇝ Camadas esperando variáveis de ambiente definidas na
camada de cima;
⇝ Tipo de dados específico de um bancos de dados.
e... o que mais precisamos ter atençao?
⇝ Camadas que serão usadas como bibliotecas, é melhor
usar objetos como estrutura de dados e evitar dicionários;
⇝ Frameworks que “geram tudo” mas não em camadas, ou
organizado em camadas mas com dependências implícitas
entre uma camada e a camada acima.
⇝ Não confiar apenas nos “olhos”, usar ferramentas que
validem a arquitetura. Ex.: Structure101.
precisamos ter atençao também em...
E… o que podemos estudar para
trabalhar corretamente com camadas?
princípios de
orientação a objetos
e
PADRÕES DE PROJETO
quais deles podem me ajudar?
⇝ Princípios SOLID;
⇝ Padrões GoF;
⇝ Padrões GRASP;
⇝ Padrão MVC;
CAMADAS SÓ
SE APLICAM
A SOLUÇÕES COM
BACKEND/FRONTEND?
Não !...
DOMAINCONTROLLER
JSON
YAML
LINE
ARGUMENTS
EXTERNAL
CLIENTS
APP DE DEPLOY EXECUTADA VIA
LINHA DE COMANDO.
TODA SOLUÇÃO
DEVERIA SER
ARQUITETADA EM
CAMADAS?
Não !...
Isso não é uma regra,
esse estilo não resolve
todos seus problemas,
mas geralmente ajuda!
Entenda bem o
negócio e o momento
do projeto!
QUAIS VANTAGENS?
⇝ Maior organização do código;
⇝ Código mais testável;
⇝ Software modularizado;
⇝ Divisão de responsabilidade;
⇝ Maior adaptabilidade;
⇝ Maior reusabilidade;
⇝ Maior escalabilidade.
E DESVANTAGENS?
⇝ Maior número de Classes;
⇝ Maior complexidade na
execução do sistema;
⇝ Menos performance
dependendo da forma de
comunicação entre as camadas;
⇝ Maior complexidade no
versionamento;
⇝ Requer maior conhecimento e
maturidade do desenvolvedor.
COMO O USO DE CAMADAS AJUDA NA
CONSTRUÇÃO DE SOLUÇÕES CORPORATIVAS
NA NEXXERA.
DOMAIN
SERVICE
REPOSITORY
MODEL
(WEB)
CONTROLLER
REST
DATABASES
SOLUÇÃO FINANCEIRA,
PAGAMENTOS BANCÁRIOS
(CONSOLE)
CONTROLLER
TEXT/PLAIN
FILE
EXTERNAL
SERVICES
RELACIONAL
www.nexxera.com
OBRIGADO A TODOS!
isaacsouza@gmail.com
Projeto exemplo em:
https://gitlab.com/betterdeveloper-examples/
quotes-box-layers
Slides em:
https://pt.slideshare.net/betterdeveloper
www.betterdeveloper.net
PERGUNTAS?
BONS LIVROS QUE AJUDAM NO ASSUNTO...
agile software
development,
principles,
patterns and pratices

Mais conteúdo relacionado

Mais procurados

Resilience4j with Spring Boot
Resilience4j with Spring BootResilience4j with Spring Boot
Resilience4j with Spring Boot
Knoldus Inc.
 
Microservices
Microservices Microservices
Microservices
Trieu Nguyen
 
Lean Startup + Story Mapping = Awesome Products Faster
Lean Startup + Story Mapping = Awesome Products FasterLean Startup + Story Mapping = Awesome Products Faster
Lean Startup + Story Mapping = Awesome Products Faster
Brad Swanson
 
Django app deployment in Azure By Saurabh Agarwal
Django app deployment in Azure By Saurabh AgarwalDjango app deployment in Azure By Saurabh Agarwal
Django app deployment in Azure By Saurabh Agarwal
ratneshsinghparihar
 
21 técnicas para quebra de User Stories para os PO's
21 técnicas para quebra de User Stories para os PO's21 técnicas para quebra de User Stories para os PO's
21 técnicas para quebra de User Stories para os PO's
Carlos Silva Júnior
 
Spring boot microservice metrics monitoring
Spring boot   microservice metrics monitoringSpring boot   microservice metrics monitoring
Spring boot microservice metrics monitoring
Oracle Korea
 
ManageEngine's Patch Manager Plus
ManageEngine's Patch Manager PlusManageEngine's Patch Manager Plus
ManageEngine's Patch Manager Plus
ManageEngine
 
Microservice Architecture Software Architecture Microservice Design Pattern
Microservice Architecture Software Architecture Microservice Design PatternMicroservice Architecture Software Architecture Microservice Design Pattern
Microservice Architecture Software Architecture Microservice Design Pattern
jeetendra mandal
 
Workshop Agile Testing Mindset
Workshop Agile Testing MindsetWorkshop Agile Testing Mindset
Workshop Agile Testing Mindset
Elias Nogueira
 
Microservices Architecture - Bangkok 2018
Microservices Architecture - Bangkok 2018Microservices Architecture - Bangkok 2018
Microservices Architecture - Bangkok 2018
Araf Karsh Hamid
 
Event Driven Software Architecture Pattern
Event Driven Software Architecture PatternEvent Driven Software Architecture Pattern
Event Driven Software Architecture Pattern
jeetendra mandal
 
Microservice Architecture
Microservice ArchitectureMicroservice Architecture
Microservice Architecture
Nguyen Tung
 
Arquitetura de Software
Arquitetura de SoftwareArquitetura de Software
Arquitetura de Software
Marcelo Yamaguti
 
Introduction to Microservices
Introduction to MicroservicesIntroduction to Microservices
Introduction to Microservices
Amazon Web Services
 
Devops Adoption Roadmap v 2.7 Agiles Colombia 2020
Devops Adoption Roadmap v 2.7 Agiles Colombia 2020Devops Adoption Roadmap v 2.7 Agiles Colombia 2020
Devops Adoption Roadmap v 2.7 Agiles Colombia 2020
Javier Dominguez
 
Decompose your monolith: Six principles for refactoring a monolith to microse...
Decompose your monolith: Six principles for refactoring a monolith to microse...Decompose your monolith: Six principles for refactoring a monolith to microse...
Decompose your monolith: Six principles for refactoring a monolith to microse...
Chris Richardson
 
Workshop User Stories
Workshop User StoriesWorkshop User Stories
Workshop User Stories
Mayra de Souza
 
Gestão de Configuração (CM)
Gestão de Configuração (CM)Gestão de Configuração (CM)
Gestão de Configuração (CM)
Mário Pravato Junior
 
Devops Maturity Assessment Model - Ágiles 2019
Devops Maturity Assessment Model - Ágiles 2019Devops Maturity Assessment Model - Ágiles 2019
Devops Maturity Assessment Model - Ágiles 2019
Javier Dominguez
 
Kanban pizza game - Introdução ao Kanban
Kanban pizza game - Introdução ao KanbanKanban pizza game - Introdução ao Kanban
Kanban pizza game - Introdução ao Kanban
Michelle Moraes Teodoro
 

Mais procurados (20)

Resilience4j with Spring Boot
Resilience4j with Spring BootResilience4j with Spring Boot
Resilience4j with Spring Boot
 
Microservices
Microservices Microservices
Microservices
 
Lean Startup + Story Mapping = Awesome Products Faster
Lean Startup + Story Mapping = Awesome Products FasterLean Startup + Story Mapping = Awesome Products Faster
Lean Startup + Story Mapping = Awesome Products Faster
 
Django app deployment in Azure By Saurabh Agarwal
Django app deployment in Azure By Saurabh AgarwalDjango app deployment in Azure By Saurabh Agarwal
Django app deployment in Azure By Saurabh Agarwal
 
21 técnicas para quebra de User Stories para os PO's
21 técnicas para quebra de User Stories para os PO's21 técnicas para quebra de User Stories para os PO's
21 técnicas para quebra de User Stories para os PO's
 
Spring boot microservice metrics monitoring
Spring boot   microservice metrics monitoringSpring boot   microservice metrics monitoring
Spring boot microservice metrics monitoring
 
ManageEngine's Patch Manager Plus
ManageEngine's Patch Manager PlusManageEngine's Patch Manager Plus
ManageEngine's Patch Manager Plus
 
Microservice Architecture Software Architecture Microservice Design Pattern
Microservice Architecture Software Architecture Microservice Design PatternMicroservice Architecture Software Architecture Microservice Design Pattern
Microservice Architecture Software Architecture Microservice Design Pattern
 
Workshop Agile Testing Mindset
Workshop Agile Testing MindsetWorkshop Agile Testing Mindset
Workshop Agile Testing Mindset
 
Microservices Architecture - Bangkok 2018
Microservices Architecture - Bangkok 2018Microservices Architecture - Bangkok 2018
Microservices Architecture - Bangkok 2018
 
Event Driven Software Architecture Pattern
Event Driven Software Architecture PatternEvent Driven Software Architecture Pattern
Event Driven Software Architecture Pattern
 
Microservice Architecture
Microservice ArchitectureMicroservice Architecture
Microservice Architecture
 
Arquitetura de Software
Arquitetura de SoftwareArquitetura de Software
Arquitetura de Software
 
Introduction to Microservices
Introduction to MicroservicesIntroduction to Microservices
Introduction to Microservices
 
Devops Adoption Roadmap v 2.7 Agiles Colombia 2020
Devops Adoption Roadmap v 2.7 Agiles Colombia 2020Devops Adoption Roadmap v 2.7 Agiles Colombia 2020
Devops Adoption Roadmap v 2.7 Agiles Colombia 2020
 
Decompose your monolith: Six principles for refactoring a monolith to microse...
Decompose your monolith: Six principles for refactoring a monolith to microse...Decompose your monolith: Six principles for refactoring a monolith to microse...
Decompose your monolith: Six principles for refactoring a monolith to microse...
 
Workshop User Stories
Workshop User StoriesWorkshop User Stories
Workshop User Stories
 
Gestão de Configuração (CM)
Gestão de Configuração (CM)Gestão de Configuração (CM)
Gestão de Configuração (CM)
 
Devops Maturity Assessment Model - Ágiles 2019
Devops Maturity Assessment Model - Ágiles 2019Devops Maturity Assessment Model - Ágiles 2019
Devops Maturity Assessment Model - Ágiles 2019
 
Kanban pizza game - Introdução ao Kanban
Kanban pizza game - Introdução ao KanbanKanban pizza game - Introdução ao Kanban
Kanban pizza game - Introdução ao Kanban
 

Semelhante a Arquitetura em camadas em python e quanto isso pode ajudar

Clean Architecture
Clean ArchitectureClean Architecture
Clean Architecture
Rodrigo Branas
 
Como DDD e Strategic Design estão nos ajudando a modernizar um Legado
Como DDD e Strategic Design estão nos ajudando a modernizar um LegadoComo DDD e Strategic Design estão nos ajudando a modernizar um Legado
Como DDD e Strategic Design estão nos ajudando a modernizar um Legado
Luiz Costa
 
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
 
PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011
Evaldo Junior
 
Não deixe seu projeto só nas mãos do framework
Não deixe seu projeto só nas mãos do frameworkNão deixe seu projeto só nas mãos do framework
Não deixe seu projeto só nas mãos do framework
Giuseppe Lopes
 
Palestra nosql
Palestra nosqlPalestra nosql
Palestra nosql
Christiano Anderson
 
TDC2016SP - Trilha Microservices
TDC2016SP - Trilha MicroservicesTDC2016SP - Trilha Microservices
TDC2016SP - Trilha Microservices
tdc-globalcode
 
O que vi na QCon 2012 São Paulo
O que vi na QCon 2012 São PauloO que vi na QCon 2012 São Paulo
O que vi na QCon 2012 São Paulo
Ismael
 
Desenvolvimento de aplicações embarcadas utilizando Python
Desenvolvimento de aplicações embarcadas utilizando PythonDesenvolvimento de aplicações embarcadas utilizando Python
Desenvolvimento de aplicações embarcadas utilizando Python
Flávio Ribeiro
 
Utilizando NoSQL no desenvolvimento de soluções inteligentes
Utilizando NoSQL no desenvolvimento de soluções inteligentesUtilizando NoSQL no desenvolvimento de soluções inteligentes
Utilizando NoSQL no desenvolvimento de soluções inteligentes
Christiano Anderson
 
Componentes Transformers: Combinando o melhor de cada framework
Componentes Transformers: Combinando o melhor de cada frameworkComponentes Transformers: Combinando o melhor de cada framework
Componentes Transformers: Combinando o melhor de cada framework
Flávio Lisboa
 
Infraestrutura como código Terraform aws openshift Ansible
Infraestrutura como código Terraform aws openshift AnsibleInfraestrutura como código Terraform aws openshift Ansible
Infraestrutura como código Terraform aws openshift Ansible
Claudemir de Almeida Rosa
 
Estratégias de Estruturação de Código-fonte e Controlo de Versão
Estratégias de Estruturação de Código-fonte e Controlo de VersãoEstratégias de Estruturação de Código-fonte e Controlo de Versão
Estratégias de Estruturação de Código-fonte e Controlo de Versão
Comunidade NetPonto
 
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
Isaac de Souza
 
O que move a web atualmente?
O que move a web atualmente?O que move a web atualmente?
O que move a web atualmente?
Fabio Janiszevski
 
Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014
Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014
Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014
Gilmar PSL
 
Projeto de API, por Gilmar P.S
Projeto de API, por Gilmar P.SProjeto de API, por Gilmar P.S
Projeto de API, por Gilmar P.S
Thoughtworks
 
Boas Práticas em Aplicações na Nuvem: Twelve-Factor App | MVPConf Latam 2021
Boas Práticas em Aplicações na Nuvem: Twelve-Factor App | MVPConf Latam 2021Boas Práticas em Aplicações na Nuvem: Twelve-Factor App | MVPConf Latam 2021
Boas Práticas em Aplicações na Nuvem: Twelve-Factor App | MVPConf Latam 2021
Renato Groffe
 
Trabalho 4 Semestre e 5 Semestre 2015
Trabalho 4 Semestre e 5 Semestre 2015Trabalho 4 Semestre e 5 Semestre 2015
Trabalho 4 Semestre e 5 Semestre 2015
Rodrigo Marinho
 
Aspectos do aprendizado do paradigma orientado a objetos por programadores pr...
Aspectos do aprendizado do paradigma orientado a objetos por programadores pr...Aspectos do aprendizado do paradigma orientado a objetos por programadores pr...
Aspectos do aprendizado do paradigma orientado a objetos por programadores pr...
Rodrigo Vieira
 

Semelhante a Arquitetura em camadas em python e quanto isso pode ajudar (20)

Clean Architecture
Clean ArchitectureClean Architecture
Clean Architecture
 
Como DDD e Strategic Design estão nos ajudando a modernizar um Legado
Como DDD e Strategic Design estão nos ajudando a modernizar um LegadoComo DDD e Strategic Design estão nos ajudando a modernizar um Legado
Como DDD e Strategic Design estão nos ajudando a modernizar um Legado
 
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
 
PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011
 
Não deixe seu projeto só nas mãos do framework
Não deixe seu projeto só nas mãos do frameworkNão deixe seu projeto só nas mãos do framework
Não deixe seu projeto só nas mãos do framework
 
Palestra nosql
Palestra nosqlPalestra nosql
Palestra nosql
 
TDC2016SP - Trilha Microservices
TDC2016SP - Trilha MicroservicesTDC2016SP - Trilha Microservices
TDC2016SP - Trilha Microservices
 
O que vi na QCon 2012 São Paulo
O que vi na QCon 2012 São PauloO que vi na QCon 2012 São Paulo
O que vi na QCon 2012 São Paulo
 
Desenvolvimento de aplicações embarcadas utilizando Python
Desenvolvimento de aplicações embarcadas utilizando PythonDesenvolvimento de aplicações embarcadas utilizando Python
Desenvolvimento de aplicações embarcadas utilizando Python
 
Utilizando NoSQL no desenvolvimento de soluções inteligentes
Utilizando NoSQL no desenvolvimento de soluções inteligentesUtilizando NoSQL no desenvolvimento de soluções inteligentes
Utilizando NoSQL no desenvolvimento de soluções inteligentes
 
Componentes Transformers: Combinando o melhor de cada framework
Componentes Transformers: Combinando o melhor de cada frameworkComponentes Transformers: Combinando o melhor de cada framework
Componentes Transformers: Combinando o melhor de cada framework
 
Infraestrutura como código Terraform aws openshift Ansible
Infraestrutura como código Terraform aws openshift AnsibleInfraestrutura como código Terraform aws openshift Ansible
Infraestrutura como código Terraform aws openshift Ansible
 
Estratégias de Estruturação de Código-fonte e Controlo de Versão
Estratégias de Estruturação de Código-fonte e Controlo de VersãoEstratégias de Estruturação de Código-fonte e Controlo de Versão
Estratégias de Estruturação de Código-fonte e Controlo de Versão
 
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
 
O que move a web atualmente?
O que move a web atualmente?O que move a web atualmente?
O que move a web atualmente?
 
Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014
Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014
Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014
 
Projeto de API, por Gilmar P.S
Projeto de API, por Gilmar P.SProjeto de API, por Gilmar P.S
Projeto de API, por Gilmar P.S
 
Boas Práticas em Aplicações na Nuvem: Twelve-Factor App | MVPConf Latam 2021
Boas Práticas em Aplicações na Nuvem: Twelve-Factor App | MVPConf Latam 2021Boas Práticas em Aplicações na Nuvem: Twelve-Factor App | MVPConf Latam 2021
Boas Práticas em Aplicações na Nuvem: Twelve-Factor App | MVPConf Latam 2021
 
Trabalho 4 Semestre e 5 Semestre 2015
Trabalho 4 Semestre e 5 Semestre 2015Trabalho 4 Semestre e 5 Semestre 2015
Trabalho 4 Semestre e 5 Semestre 2015
 
Aspectos do aprendizado do paradigma orientado a objetos por programadores pr...
Aspectos do aprendizado do paradigma orientado a objetos por programadores pr...Aspectos do aprendizado do paradigma orientado a objetos por programadores pr...
Aspectos do aprendizado do paradigma orientado a objetos por programadores pr...
 

Arquitetura em camadas em python e quanto isso pode ajudar

  • 1. Quanto isso pode ajudar? ARQUITETURA EM CAMADAS EM PYTHON
  • 2. ITENS QUE VEREMOS SOBRE ESSE ASSUNTO ⇝ O que é arquitetura em camadas; ⇝ Pensar em camadas ainda é importante? ⇝ Aplicando uso de camadas em Python; ⇝ Padrões de projetos, como eles ajudam a ter camadas; ⇝ Quais vantagens e desvantagens? ⇝ Um caso real do uso de camadas.
  • 4. É UM ESTILO ARQUITETURAL QUE PROPÕE DIVIDIR UM SISTEMA EM VÁRIAS CAMADAS DE ACORDO COM A RESPONSABILIDADE DE CADA PARTE DO SOFTWARE. ESSE ESTILO PROPÕE QUE: ⇝ AS CAMADAS TENHAM UM PROPÓSITO BEM DEFINIDO; ⇝ CADA CAMADA CONHEÇA APENAS CAMADAS ABAIXO DELA; ⇝ AS CAMADAS POSSAM SER REAPROVEITÁVEIS.
  • 5. UM DESENHO TRADICIONAL DE CAMADAS...
  • 6. O USO DE CAMADAS EM SOFTWARE GANHOU FORÇA NA DÉCADA DE 90, COM USO DE 2 CAMADAS. LOGO DEPOIS GANHOU MAIS POPULARIDADE COM O USO DE 3 CAMADAS. O CONCEITO NÃO NASCEU NO MUNDO DE SOFTWARE, OUTRAS ÁREAS O USAM HÁ MUITO TEMPO! E NO MUNDO DE SOFTWARE ELE TAMBÉM É APLICADO HÁ MAIS TEMPO DO QUE PARECE.
  • 8. E… NA MINHA APLICAÇÃO PENSAR EM CAMADAS AINDA É IMPORTANTE? ⇝ MESMO COM ARQUITETURA ORIENTADA A SERVIÇOS? ⇝ MESMO COM MICRO-SERVIÇOS ? ⇝ MESMO COM CLOUD? DEVEMOS AINDA TER QUE PENSAR EM CAMADAS? SIM !!!
  • 9. VOCÊ PODE NÃO SABER OU ATÉ NÃO QUERER, MAS GERALMENTE SUA APLICAÇÃO ESTÁ EM CAMADAS !!! WEB APP MOBILE APP DATABASE CONTROLLERS REST DOMAIN SERVICE REPOSITORY MODEL RELATIONAL NOSQL EXTERNAL SERVICES REST SERVICES MESSAGE QUEUE OTHERS FRONT BACK
  • 10. E COMO POSSO APLICAR CAMADAS EM PYTHON ?
  • 11. VAMOS USAR UM EXEMPLO !. apenas backend . Um projeto simples, chamado: Quotes Box (Caixinha de Citações) que usa os frameworks: Flask e SQLAlchemy
  • 13. O projeto começa pequeno.
  • 14. Mas, o projeto cresce um pouco...
  • 15. E... o projeto cresce mais ainda...
  • 16. o projeto é dividido em camadas!
  • 17. O fonte é dividido em vários arquivos .py...
  • 18. pronto, o projeto está usando arquitetura em camadas !!! só que não ! E PORQUE ?
  • 19. novos recursos são necessários… ⇝ Executar processos agendados (cron); ⇝ Suportar volume alto de requisições; ⇝ Trabalhar com outros bancos de dados; dificuldades na implementação surgem… ⇝ Com mais desenvolvedores há conflitos na codificação; ⇝ Fazer testes está cada vez mais difícil; ⇝ ...
  • 20. eu consigo ____ ? ⇝ Executar rotinas de negócio sem usar API rest... ⇝ Trocar de forma fácil meu framework que expõe rest... ⇝ Optar por salvar os dados em nosql ou relacional... ⇝ Aplicar testes a partes específicas de forma simples... ⇝ Dividir o trabalho entre o time sem gerar conflito... ⇝ Evoluir o sistema sem precisar refatorar tudo... e.. diante disso, nos perguntamos:
  • 21. o que pode ser feito para realmente usar camadas no projeto?
  • 22. Comece separando em pacotes, representando as camadas. Projeto Único quote-box-core==1.0.0 Projeto Core Projeto App Ou
  • 23. Tenha cuidado com dependência entre camadas Camada domain não deveria conhecer coisas da camada acima Usando apenas SQLAlchemy
  • 24. ⇝ A falta de tipagem facilita esperar atributos da camada de cima que não fazem parte do modelo da camada em questão; ⇝ Métodos decorrentes de necessidades da camada de cima, como: to_json(), json(); ⇝ Camadas esperando variáveis de ambiente definidas na camada de cima; ⇝ Tipo de dados específico de um bancos de dados. e... o que mais precisamos ter atençao?
  • 25. ⇝ Camadas que serão usadas como bibliotecas, é melhor usar objetos como estrutura de dados e evitar dicionários; ⇝ Frameworks que “geram tudo” mas não em camadas, ou organizado em camadas mas com dependências implícitas entre uma camada e a camada acima. ⇝ Não confiar apenas nos “olhos”, usar ferramentas que validem a arquitetura. Ex.: Structure101. precisamos ter atençao também em...
  • 26. E… o que podemos estudar para trabalhar corretamente com camadas?
  • 27. princípios de orientação a objetos e PADRÕES DE PROJETO
  • 28. quais deles podem me ajudar? ⇝ Princípios SOLID; ⇝ Padrões GoF; ⇝ Padrões GRASP; ⇝ Padrão MVC;
  • 29. CAMADAS SÓ SE APLICAM A SOLUÇÕES COM BACKEND/FRONTEND? Não !... DOMAINCONTROLLER JSON YAML LINE ARGUMENTS EXTERNAL CLIENTS APP DE DEPLOY EXECUTADA VIA LINHA DE COMANDO.
  • 30. TODA SOLUÇÃO DEVERIA SER ARQUITETADA EM CAMADAS? Não !... Isso não é uma regra, esse estilo não resolve todos seus problemas, mas geralmente ajuda! Entenda bem o negócio e o momento do projeto!
  • 31. QUAIS VANTAGENS? ⇝ Maior organização do código; ⇝ Código mais testável; ⇝ Software modularizado; ⇝ Divisão de responsabilidade; ⇝ Maior adaptabilidade; ⇝ Maior reusabilidade; ⇝ Maior escalabilidade. E DESVANTAGENS? ⇝ Maior número de Classes; ⇝ Maior complexidade na execução do sistema; ⇝ Menos performance dependendo da forma de comunicação entre as camadas; ⇝ Maior complexidade no versionamento; ⇝ Requer maior conhecimento e maturidade do desenvolvedor.
  • 32. COMO O USO DE CAMADAS AJUDA NA CONSTRUÇÃO DE SOLUÇÕES CORPORATIVAS NA NEXXERA.
  • 34. OBRIGADO A TODOS! isaacsouza@gmail.com Projeto exemplo em: https://gitlab.com/betterdeveloper-examples/ quotes-box-layers Slides em: https://pt.slideshare.net/betterdeveloper www.betterdeveloper.net PERGUNTAS? BONS LIVROS QUE AJUDAM NO ASSUNTO... agile software development, principles, patterns and pratices