SlideShare uma empresa Scribd logo
É Pythônico, mas...
é macarrônico?
Marcio Marchini
www.BetterDeveloper.net
Python Brasil 2016
© 2016 Marcio Marchini
Sobre o Público Alvo: Desenvolvedores em Times
© 2016 Marcio Marchini
Sobre o Título: Pythonic – no Zen (PEP 20)
© 2016 Marcio Marchini
Sobre o Título: Pythonic – no Hitchhiker’s
© 2016 Marcio Marchini
Pythonic: Programming in the Small
Programming in The Small
X
Programming in the Large
© 2016 Marcio Marchini
Sobre o Título: Macarrônico
• Emaranhado nas Dependências (Tangles)
© 2016 Marcio Marchini
Programming In The Large / Package Principles
1. Reuse-release equivalence principle (REP)
2. Common-reuse principle (CRP)
3. Common-closure principle (CCP)
4. Acyclic dependencies principle (ADP)
5. Stable-dependencies principle (SDP)
6. Stable-abstractions principle (SAP)
© 2016 Marcio Marchini
Macarrônico: Viola ADP
 ADP: Acyclic Dependency Principle
• Não deve haver ciclos no grafo de dependência de
componentes/packages
© 2016 Marcio Marchini
Antídoto: Módulos, Camadas…
• Camadas… Tudo bonito nas figuras…
• … mas seu código é assim mesmo?
• Você consegue provar?
© 2016 Marcio Marchini
Fontes do Django na ferramenta – viola ADP?
Camadas?
(Cada seta para cima é
uma violação de ADP)
© 2016 Marcio Marchini
Django: Tangle of 16 , Notação Gráfica
© 2016 Marcio Marchini
Sistemas em Camadas, Notação DSM
Em Camadas (Layered)
Estritamente em Camadas
(Strictly Layered):
uma camada só usa a
imediatamente abaixo
© 2016 Marcio Marchini
DSM - Ferramenta
• Structure 101 (C, C++, C#, Java, Delphi, Python, …)
 Minha preferida
© 2016 Marcio Marchini
Django: Tangle of 16 , Notação DSM
© 2016 Marcio Marchini
Flask REST com SQLAlchemy
 App referencia DB
 DB referencia Flask
 Model referencia DB
http://flask-sqlalchemy.pocoo.org/2.1/quickstart/#a-minimal-
application
 Seu Model ficou acoplado à
framework de REST
 Mudar pra Bottle força-me a
ter que abrir esse módulo
(model)
 Model Depende de REST (Controller)
 API REST vai usar Model (normal)
 Circularidade!!!
© 2016 Marcio Marchini
Projeto Flask REST maior, sem Structure 101
 Tangled antes de usar s101:
© 2016 Marcio Marchini
Prevenindo Macarrão na Nexxera.com: GitLab + S101/build
• Esteira GitLab:
• Stage: Code Analysis; job: struct101
© 2016 Marcio Marchini
Projeto Flask REST maior, com Structure 101
 Untangled após usar s101:
© 2016 Marcio Marchini
Garantindo sem Macarrão na Nexxera.com
• Esteira GitLab:
• Stage: Code Analysis; job: struct101
© 2016 Marcio Marchini
GitLab CI runner / s101 na Nexxera.com
• Structure 101g/build analisa tangles na esteira CD/CI
© 2016 Marcio Marchini
Gitlab CI runner / s101 na Nexxera.com
• Clean Code: Só código arquiteturalmente limpo passa!
© 2016 Marcio Marchini
Concluindo
• Cuidado com Tutoriais rápidos na Internet
• Eles podem estar te guiando para o macarronismo
• Cuidado: 10 anos de experiência versus
10 * (1 ano nas mesmas práticas)
• “Frameworks injetam dependências no seu código”
•Cuidado para não se amarrar demais
• Incorpore s101 para garantir ADP
© 2016 Marcio Marchini
Perguntas?
Marcio Marchini
www.BetterDeveloper.net/cursos.html
Python Brasil 2016

Mais conteúdo relacionado

PPTX
Criando componentes e disponibilizando o como opensource em 5 minutos em .NET
PPTX
Acesso a Dados em .NET: Boas práticas de Segurança - Agosto/2017
PPTX
Acesso a Dados em .NET: Boas práticas de Segurança - .NET SP - Setembro/2017
PPTX
O novo ASP.NET - dotnetConf.Local 2016 - Santos-SP
PPTX
O novo ASP.NET - PUC Developers Day - 2016
PPTX
O novo ASP.NET: o futuro do desenvolvimento Web na plataforma .NET - OneDay
PPTX
O novo ASP.NET: o futuro do desenvolvimento Web na plataforma .NET
PPTX
O novo ASP.NET - Junho/2016
Criando componentes e disponibilizando o como opensource em 5 minutos em .NET
Acesso a Dados em .NET: Boas práticas de Segurança - Agosto/2017
Acesso a Dados em .NET: Boas práticas de Segurança - .NET SP - Setembro/2017
O novo ASP.NET - dotnetConf.Local 2016 - Santos-SP
O novo ASP.NET - PUC Developers Day - 2016
O novo ASP.NET: o futuro do desenvolvimento Web na plataforma .NET - OneDay
O novo ASP.NET: o futuro do desenvolvimento Web na plataforma .NET
O novo ASP.NET - Junho/2016

Mais de Marcio Marchini (9)

PDF
Critérios de Aceite de Código Para Times Internos ou Terceirizados
PDF
Whitepaper-Custos
PPT
01-a-Intro-BetterDev
PPTX
OmbrosDeGigantes-TDC2014
PPT
BDD-NamoroOn
PPT
01-b-Ping
PPT
mqm-Agile
PDF
Branches-Intro
Critérios de Aceite de Código Para Times Internos ou Terceirizados
Whitepaper-Custos
01-a-Intro-BetterDev
OmbrosDeGigantes-TDC2014
BDD-NamoroOn
01-b-Ping
mqm-Agile
Branches-Intro
Anúncio

Último (16)

PDF
COBITxITIL-Entenda as diferença em uso governança TI
PDF
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
PDF
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
PDF
Processos na gestão de transportes, TM100 Col18
PDF
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
PDF
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
PPTX
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
PPTX
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
PPTX
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
PPTX
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
PDF
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
PDF
Custos e liquidação no SAP Transportation Management, TM130 Col18
PDF
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
PDF
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
PDF
Termos utilizados na designação de relação entre pessoa e uma obra.pdf
PPTX
Arquitetura de computadores - Memórias Secundárias
COBITxITIL-Entenda as diferença em uso governança TI
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
Processos na gestão de transportes, TM100 Col18
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
Custos e liquidação no SAP Transportation Management, TM130 Col18
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
Termos utilizados na designação de relação entre pessoa e uma obra.pdf
Arquitetura de computadores - Memórias Secundárias
Anúncio

É Pythonico, mas... é macarrônico

  • 1. É Pythônico, mas... é macarrônico? Marcio Marchini www.BetterDeveloper.net Python Brasil 2016
  • 2. © 2016 Marcio Marchini Sobre o Público Alvo: Desenvolvedores em Times
  • 3. © 2016 Marcio Marchini Sobre o Título: Pythonic – no Zen (PEP 20)
  • 4. © 2016 Marcio Marchini Sobre o Título: Pythonic – no Hitchhiker’s
  • 5. © 2016 Marcio Marchini Pythonic: Programming in the Small Programming in The Small X Programming in the Large
  • 6. © 2016 Marcio Marchini Sobre o Título: Macarrônico • Emaranhado nas Dependências (Tangles)
  • 7. © 2016 Marcio Marchini Programming In The Large / Package Principles 1. Reuse-release equivalence principle (REP) 2. Common-reuse principle (CRP) 3. Common-closure principle (CCP) 4. Acyclic dependencies principle (ADP) 5. Stable-dependencies principle (SDP) 6. Stable-abstractions principle (SAP)
  • 8. © 2016 Marcio Marchini Macarrônico: Viola ADP  ADP: Acyclic Dependency Principle • Não deve haver ciclos no grafo de dependência de componentes/packages
  • 9. © 2016 Marcio Marchini Antídoto: Módulos, Camadas… • Camadas… Tudo bonito nas figuras… • … mas seu código é assim mesmo? • Você consegue provar?
  • 10. © 2016 Marcio Marchini Fontes do Django na ferramenta – viola ADP? Camadas? (Cada seta para cima é uma violação de ADP)
  • 11. © 2016 Marcio Marchini Django: Tangle of 16 , Notação Gráfica
  • 12. © 2016 Marcio Marchini Sistemas em Camadas, Notação DSM Em Camadas (Layered) Estritamente em Camadas (Strictly Layered): uma camada só usa a imediatamente abaixo
  • 13. © 2016 Marcio Marchini DSM - Ferramenta • Structure 101 (C, C++, C#, Java, Delphi, Python, …)  Minha preferida
  • 14. © 2016 Marcio Marchini Django: Tangle of 16 , Notação DSM
  • 15. © 2016 Marcio Marchini Flask REST com SQLAlchemy  App referencia DB  DB referencia Flask  Model referencia DB http://flask-sqlalchemy.pocoo.org/2.1/quickstart/#a-minimal- application  Seu Model ficou acoplado à framework de REST  Mudar pra Bottle força-me a ter que abrir esse módulo (model)  Model Depende de REST (Controller)  API REST vai usar Model (normal)  Circularidade!!!
  • 16. © 2016 Marcio Marchini Projeto Flask REST maior, sem Structure 101  Tangled antes de usar s101:
  • 17. © 2016 Marcio Marchini Prevenindo Macarrão na Nexxera.com: GitLab + S101/build • Esteira GitLab: • Stage: Code Analysis; job: struct101
  • 18. © 2016 Marcio Marchini Projeto Flask REST maior, com Structure 101  Untangled após usar s101:
  • 19. © 2016 Marcio Marchini Garantindo sem Macarrão na Nexxera.com • Esteira GitLab: • Stage: Code Analysis; job: struct101
  • 20. © 2016 Marcio Marchini GitLab CI runner / s101 na Nexxera.com • Structure 101g/build analisa tangles na esteira CD/CI
  • 21. © 2016 Marcio Marchini Gitlab CI runner / s101 na Nexxera.com • Clean Code: Só código arquiteturalmente limpo passa!
  • 22. © 2016 Marcio Marchini Concluindo • Cuidado com Tutoriais rápidos na Internet • Eles podem estar te guiando para o macarronismo • Cuidado: 10 anos de experiência versus 10 * (1 ano nas mesmas práticas) • “Frameworks injetam dependências no seu código” •Cuidado para não se amarrar demais • Incorpore s101 para garantir ADP
  • 23. © 2016 Marcio Marchini Perguntas? Marcio Marchini www.BetterDeveloper.net/cursos.html Python Brasil 2016