SlideShare a Scribd company logo
1 of 23
É 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

More Related Content

Similar to É Pythonico, mas... é macarrônico

Dextra Sistemas: A linguagem PHP no modelo de Fábrica de Software
Dextra Sistemas: A linguagem PHP no modelo de Fábrica de SoftwareDextra Sistemas: A linguagem PHP no modelo de Fábrica de Software
Dextra Sistemas: A linguagem PHP no modelo de Fábrica de SoftwareDextra
 
Programação Orientada a Aspectos
Programação Orientada a AspectosProgramação Orientada a Aspectos
Programação Orientada a AspectosRicardo Terra
 
Conheça o Cloud Foundry no HCP
Conheça o Cloud Foundry no HCPConheça o Cloud Foundry no HCP
Conheça o Cloud Foundry no HCPJose Nunes
 
Web Training Aula 04: Introduction to Git
Web Training Aula 04: Introduction to GitWeb Training Aula 04: Introduction to Git
Web Training Aula 04: Introduction to GitMozDevz
 
Testes em uma arquitetura com messageria/streaming (Kafka)
Testes em uma arquitetura com messageria/streaming (Kafka)Testes em uma arquitetura com messageria/streaming (Kafka)
Testes em uma arquitetura com messageria/streaming (Kafka)Robson Agapito Correa
 
Single-SPA: Como este framework pode me ajudar na construção de Micro Front-Ends
Single-SPA: Como este framework pode me ajudar na construção de Micro Front-EndsSingle-SPA: Como este framework pode me ajudar na construção de Micro Front-Ends
Single-SPA: Como este framework pode me ajudar na construção de Micro Front-EndsDaiana Cambruzzi Avila
 
Alta Disponibilidade no MySQL 5.7 para aplicações em PHP
Alta Disponibilidade no MySQL 5.7 para aplicações em PHPAlta Disponibilidade no MySQL 5.7 para aplicações em PHP
Alta Disponibilidade no MySQL 5.7 para aplicações em PHPMySQL Brasil
 
Workshop PHP - Nível básico 2
Workshop PHP - Nível básico 2Workshop PHP - Nível básico 2
Workshop PHP - Nível básico 2inopus
 
Tópicos Emergentes - DevOps
Tópicos Emergentes - DevOpsTópicos Emergentes - DevOps
Tópicos Emergentes - DevOpsSaulo Lopes
 
Fuzzing com ZAP (Zed Attack Proxy)
Fuzzing com ZAP (Zed Attack Proxy)Fuzzing com ZAP (Zed Attack Proxy)
Fuzzing com ZAP (Zed Attack Proxy)Maurício Harley
 
Circuito 4x1: Usar CMS (Content Management Systems) desvaloriza meu trabalho?
Circuito 4x1: Usar CMS (Content Management Systems) desvaloriza meu trabalho?Circuito 4x1: Usar CMS (Content Management Systems) desvaloriza meu trabalho?
Circuito 4x1: Usar CMS (Content Management Systems) desvaloriza meu trabalho?Rafael Hernandez
 
PHP 5 de Forma Correta e Segura
PHP 5 de Forma Correta e SeguraPHP 5 de Forma Correta e Segura
PHP 5 de Forma Correta e SeguraKleber Silva
 
Impacto dos frameworks PHP
Impacto dos frameworks PHPImpacto dos frameworks PHP
Impacto dos frameworks PHPThiago Rodrigues
 

Similar to É Pythonico, mas... é macarrônico (20)

01-b-Ping
01-b-Ping01-b-Ping
01-b-Ping
 
Dextra Sistemas: A linguagem PHP no modelo de Fábrica de Software
Dextra Sistemas: A linguagem PHP no modelo de Fábrica de SoftwareDextra Sistemas: A linguagem PHP no modelo de Fábrica de Software
Dextra Sistemas: A linguagem PHP no modelo de Fábrica de Software
 
DevOps - Operação contínua
DevOps - Operação contínuaDevOps - Operação contínua
DevOps - Operação contínua
 
Programação Orientada a Aspectos
Programação Orientada a AspectosProgramação Orientada a Aspectos
Programação Orientada a Aspectos
 
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
 
Conheça o Cloud Foundry no HCP
Conheça o Cloud Foundry no HCPConheça o Cloud Foundry no HCP
Conheça o Cloud Foundry no HCP
 
BDD-NamoroOn
BDD-NamoroOnBDD-NamoroOn
BDD-NamoroOn
 
Web Training Aula 04: Introduction to Git
Web Training Aula 04: Introduction to GitWeb Training Aula 04: Introduction to Git
Web Training Aula 04: Introduction to Git
 
Git hub and Laravel
Git hub and Laravel Git hub and Laravel
Git hub and Laravel
 
Testes em uma arquitetura com messageria/streaming (Kafka)
Testes em uma arquitetura com messageria/streaming (Kafka)Testes em uma arquitetura com messageria/streaming (Kafka)
Testes em uma arquitetura com messageria/streaming (Kafka)
 
Single-SPA: Como este framework pode me ajudar na construção de Micro Front-Ends
Single-SPA: Como este framework pode me ajudar na construção de Micro Front-EndsSingle-SPA: Como este framework pode me ajudar na construção de Micro Front-Ends
Single-SPA: Como este framework pode me ajudar na construção de Micro Front-Ends
 
AOP
AOPAOP
AOP
 
Alta Disponibilidade no MySQL 5.7 para aplicações em PHP
Alta Disponibilidade no MySQL 5.7 para aplicações em PHPAlta Disponibilidade no MySQL 5.7 para aplicações em PHP
Alta Disponibilidade no MySQL 5.7 para aplicações em PHP
 
Workshop PHP - Nível básico 2
Workshop PHP - Nível básico 2Workshop PHP - Nível básico 2
Workshop PHP - Nível básico 2
 
Tópicos Emergentes - DevOps
Tópicos Emergentes - DevOpsTópicos Emergentes - DevOps
Tópicos Emergentes - DevOps
 
Fuzzing com ZAP (Zed Attack Proxy)
Fuzzing com ZAP (Zed Attack Proxy)Fuzzing com ZAP (Zed Attack Proxy)
Fuzzing com ZAP (Zed Attack Proxy)
 
Circuito 4x1: Usar CMS (Content Management Systems) desvaloriza meu trabalho?
Circuito 4x1: Usar CMS (Content Management Systems) desvaloriza meu trabalho?Circuito 4x1: Usar CMS (Content Management Systems) desvaloriza meu trabalho?
Circuito 4x1: Usar CMS (Content Management Systems) desvaloriza meu trabalho?
 
PHP 5 de Forma Correta e Segura
PHP 5 de Forma Correta e SeguraPHP 5 de Forma Correta e Segura
PHP 5 de Forma Correta e Segura
 
Impacto dos frameworks PHP
Impacto dos frameworks PHPImpacto dos frameworks PHP
Impacto dos frameworks PHP
 
Apres s4
Apres s4 Apres s4
Apres s4
 

More from Marcio Marchini

More from Marcio Marchini (7)

Critérios de Aceite de Código Para Times Internos ou Terceirizados
Critérios de Aceite de Código Para Times Internos ou TerceirizadosCritérios de Aceite de Código Para Times Internos ou Terceirizados
Critérios de Aceite de Código Para Times Internos ou Terceirizados
 
Whitepaper-Custos
Whitepaper-CustosWhitepaper-Custos
Whitepaper-Custos
 
01-a-Intro-BetterDev
01-a-Intro-BetterDev01-a-Intro-BetterDev
01-a-Intro-BetterDev
 
OmbrosDeGigantes-TDC2014
OmbrosDeGigantes-TDC2014OmbrosDeGigantes-TDC2014
OmbrosDeGigantes-TDC2014
 
gae
gaegae
gae
 
mqm-Agile
mqm-Agilemqm-Agile
mqm-Agile
 
Branches-Intro
Branches-IntroBranches-Intro
Branches-Intro
 

É 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