Your code sucks, let's fix it! Objects Calisthenics
Upcoming SlideShare
Loading in...5
×
 

Your code sucks, let's fix it! Objects Calisthenics

on

  • 314 views

Objects Calisthenics são um conjunto de técnicas e regras que vão te ajudar a identificar áreas de problemas em seu código, e assim você irá escrever um código melhor, evitando armadilhas ...

Objects Calisthenics são um conjunto de técnicas e regras que vão te ajudar a identificar áreas de problemas em seu código, e assim você irá escrever um código melhor, evitando armadilhas comuns.

Statistics

Views

Total Views
314
Views on SlideShare
313
Embed Views
1

Actions

Likes
0
Downloads
2
Comments
1

1 Embed 1

https://twitter.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
  • - Palestra do @guilhermeblanco http://www.slideshare.net/guilhermeblanco/phpubsp-object-calisthenics-aplicado-ao-php
    - Palestra do @rdohms http://www.slideshare.net/rdohms/object-calisthenicstek13
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Your code sucks, let's fix it! Objects Calisthenics Your code sucks, let's fix it! Objects Calisthenics Presentation Transcript

  • Your code sucks, let’s fix it! Objects Calisthenics Marcelo Siqueira @marcelosiqueira
  • Your code sucks, let’s fix it! Objects Calisthenics Marcelo Siqueira @marcelosiqueira Programador PHP/Python, Defensor de Software Livre e GNU/Linux, Nerd e Empreendedor!
  • Your code sucks, let’s fix it! Objects Calisthenics Grupo PHPMS O Grupo de Desenvolvedores PHP de Mato Grosso do Sul foi criado há 6 anos com objetivo de divulgar e incentivar a adoção da linguagem de programação PHP no desenvolvimento de software em Mato Grosso do Sul, além de capacitar os profissionais promovendo encontros, DOJOs, workshops, palestras e eventos em geral. Alguns dados sobre o grupo: -mais de 600 membros na lista de discussão Google Groups; -mais de 400 pessoas cutiram fan-page do grupo; -mais de 100 membros no grupo do Facebook;
  • Your code sucks, let’s fix it! Objects Calisthenics Essa palestra foi baseado nas palestras.
  • Your code sucks, let’s fix it! Objects Calisthenics Guilherme Blanco @guilhermeblanco Object Calisthenics aplicado ao PHP Essa palestra foi baseado nas palestras.
  • Your code sucks, let’s fix it! Objects Calisthenics Guilherme Blanco @guilhermeblanco Object Calisthenics aplicado ao PHP Essa palestra foi baseado nas palestras. Rafael Dohms @rdohms Object Calisthenics aplicado ao PHP
  • Your code sucks, let’s fix it! Objects Calisthenics Why does my code suck?
  • Your code sucks, let’s fix it! Objects Calisthenics Por que meu código é ruim?
  • Your code sucks, let’s fix it! Objects Calisthenics É legível? Por que meu código é ruim?
  • Your code sucks, let’s fix it! Objects Calisthenics É legível? Por que meu código é ruim? É testável
  • Your code sucks, let’s fix it! Objects Calisthenics É fácil a manutenção? É legível? Por que meu código é ruim? É testável
  • Your code sucks, let’s fix it! Objects Calisthenics É fácil a manutenção? É legível? Por que meu código é ruim? É reusável É testável
  • Your code sucks, let’s fix it! Objects Calisthenics O que acham disso?
  • Your code sucks, let’s fix it! Objects Calisthenics Suck code!
  • Your code sucks, let’s fix it! Objects Calisthenics Como melhorar isso?
  • Your code sucks, let’s fix it! Objects Calisthenics Object Calisthenics
  • Your code sucks, let’s fix it! Objects Calisthenics cal·is·then·ics - substantivo - /ˌkaləsˈTHeniks/ Termo derivado do grego: "exercício", "exercício de relaxamento", "ginástica rítmica" Object Calisthenics
  • Your code sucks, let’s fix it! Objects Calisthenics cal·is·then·ics - substantivo - /ˌkaləsˈTHeniks/ Termo derivado do grego: "exercício", "exercício de relaxamento", "ginástica rítmica" Object Calisthenics Uma variedade de exercícios simples e rítmicos para alcançar melhor qualidade de código e OO.
  • Your code sucks, let’s fix it! Objects Calisthenics “So here’s an exercise that can help you to internalize principles of good object-oriented design and actually use them in real life.” --Jeff Bay
  • Your code sucks, let’s fix it! Objects Calisthenics “Então aqui está um exercício que pode ajudá-lo a internalizar princípios de um bom design orientado a objeto e, na verdade, usá-las na vida real.” --Jeff Bay
  • Your code sucks, let’s fix it! Objects Calisthenics “Então aqui está um exercício que pode ajudá-lo a Importante: internalizar princípios de um bom design PHP != JAVA orientado a Algumas adaptações devem ser feitas objeto e, na verdade, usá-las na vida real.” --Jeff Bay
  • Your code sucks, let’s fix it! Objects Calisthenics Regras: Nove (9) orientações "bem" simples e que podem ser utilizadas em qualquer linguagem orientada a objetos.
  • Your code sucks, let’s fix it! Objects Calisthenics Regras: Repetindo: Nove (9) orientações "bem" simples PHP é != e que podem adaptações devem ser feitasem Algumas ser utilizadas qualquer linguagem orientada a objetos.
  • Your code sucks, let’s fix it! Objects Calisthenics OC # 1 "Only one indentation level per method" method"
  • Your code sucks, let’s fix it! Objects Calisthenics OC # 1 "Somente um nível de indentação por método" método"
  • Your code sucks, let’s fix it! Objects Calisthenics OC # 1 "Somente um nível de indentação por método" método" Neologismo derivado da palavra inglesa "indentation", que significa "recuo".
  • Your code sucks, let’s fix it! Objects Calisthenics
  • Your code sucks, let’s fix it! Objects Calisthenics 0 1 2 3
  • Your code sucks, let’s fix it! Objects Calisthenics 0 1 2 3
  • Your code sucks, let’s fix it! Objects Calisthenics
  • Your code sucks, let’s fix it! Objects Calisthenics Espaço em branco
  • Your code sucks, let’s fix it! Objects Calisthenics Espaço em branco Logica duplicada
  • Your code sucks, let’s fix it! Objects Calisthenics 0 1 2
  • Your code sucks, let’s fix it! Objects Calisthenics 0 1 2
  • Your code sucks, let’s fix it! Objects Calisthenics IF de uma linha, operação simples
  • Your code sucks, let’s fix it! Objects Calisthenics Return rápido IF de uma linha, operação simples
  • Your code sucks, let’s fix it! Objects Calisthenics Return rápido IF de uma linha, operação simples Função nativa C, mais rápida.
  • Your code sucks, let’s fix it! Objects Calisthenics Podemos melhorar!
  • Your code sucks, let’s fix it! Objects Calisthenics Interação rápida Método reusável
  • Your code sucks, let’s fix it! Objects Calisthenics Interação rápida Método reusável Método matches, resultado “true”
  • Your code sucks, let’s fix it! Objects Calisthenics Interação rápida Método reusável Retorno aceitável: expectativa/retorno Método matches, resultado “true”
  • Your code sucks, let’s fix it! Objects Calisthenics Regra #1 Somente um nível de indentação/recuo por método Benefícios: – Maior coesão; – Reduz a complexidade ciclomática; – Métodos acabam fazendo apenas uma coisa, como deve ser; – Aumenta a reusabilidade.
  • Your code sucks, let’s fix it! Objects Calisthenics OC # 2 "Do not use the 'else' keyword"
  • Your code sucks, let’s fix it! Objects Calisthenics OC # 2 "Não utilize a palavra-chave 'else'" 'else'"
  • Your code sucks, let’s fix it! Objects Calisthenics
  • Your code sucks, let’s fix it! Objects Calisthenics
  • Your code sucks, let’s fix it! Objects Calisthenics Variável intermediária Variável intermediária
  • Your code sucks, let’s fix it! Objects Calisthenics Intermediária removida Retorno rápido
  • Your code sucks, let’s fix it! Objects Calisthenics Regra #2 Não utilize a palavra-chave 'else' Benefícios: – Ajuda a prevenir duplicação de código; – Reduz a complexidade ciclomática; – Faz o código ficar mais limpo, passando por um único caminho.
  • Your code sucks, let’s fix it! Objects Calisthenics Adapted OC # 3 "Wrap primitive types and strings" * if there is behavior
  • Your code sucks, let’s fix it! Objects Calisthenics Adaptada OC # 3 "Encapsule os tipos primitivos e strings" * se eles possuírem comportamento
  • Your code sucks, let’s fix it! Objects Calisthenics
  • Your code sucks, let’s fix it! Objects Calisthenics Operaćão incorreta
  • Your code sucks, let’s fix it! Objects Calisthenics Operaćão incorreta
  • Your code sucks, let’s fix it! Objects Calisthenics Agora pode encapsular todas as operações relacionadas com a animação
  • Your code sucks, let’s fix it! Objects Calisthenics Regra #2 Encapsule os tipos primitivos e strings * se eles possuírem comportamento Benefícios: – Ajuda a identificar o que deve ser um objeto; – Indução de Tipo; – Encapsulamento de operações.
  • Your code sucks, let’s fix it! Objects Calisthenics Adapted OC # 4 "Only one -> per line" * getter chain or a fluent interface
  • Your code sucks, let’s fix it! Objects Calisthenics Adaptada OC # 4 "Somente um ponto (“arrow” para o PHP) por linha" * cadeia getter ou uma interface fluente
  • Your code sucks, let’s fix it! Objects Calisthenics propriedades são mais difíceis de testar Sem espaço em branco
  • Your code sucks, let’s fix it! Objects Calisthenics
  • Your code sucks, let’s fix it! Objects Calisthenics Interface fluente
  • Your code sucks, let’s fix it! Objects Calisthenics Interface fluente Operadores alinhados
  • Your code sucks, let’s fix it! Objects Calisthenics Interface fluente Operadores alinhados Somente geters (nenhuma operação)
  • Your code sucks, let’s fix it! Objects Calisthenics Regra #4 Somente um ponto (“arrow” para o PHP) por linha * cadeia getter ou uma interface fluente Benefícios: – Legibilidade; – Construção de testes facilitada (mocks); – Mais fácil para depurar;
  • Your code sucks, let’s fix it! Objects Calisthenics OC # 5 "Do not Abbreviate"
  • Your code sucks, let’s fix it! Objects Calisthenics OC # 5 "Não abreviar"
  • Your code sucks, let’s fix it! Objects Calisthenics
  • Your code sucks, let’s fix it! Objects Calisthenics
  • Your code sucks, let’s fix it! Objects Calisthenics Por que você abrevia?
  • Your code sucks, let’s fix it! Objects Calisthenics – Preguiça de escrever o mesmo nome várias vezes... • Talvez isso indique duplicidade de código!
  • Your code sucks, let’s fix it! Objects Calisthenics - Preguiça de escrever o nome do método muito longo... • Talvez isso indique que o seu método faz mais de uma coisa. Isso deve ser separado em vários métodos ou até classes!
  • Your code sucks, let’s fix it! Objects Calisthenics Mais do que uma responsabilidade?
  • Your code sucks, let’s fix it! Objects Calisthenics Mais do que uma responsabilidade? começa a partir de onde?
  • Your code sucks, let’s fix it! Objects Calisthenics Mais do que uma responsabilidade? começa a partir de onde? Use nomenclaturas mais claras: fetchPage() downloadPage()
  • Your code sucks, let’s fix it! Objects Calisthenics Mais do que uma responsabilidade? começa a partir de onde? Use nomes mais claras: fetchPage() downloadPage() Use um dicionário: fork, create, begin, open
  • Your code sucks, let’s fix it! Objects Calisthenics Mais do que uma responsabilidade? começa a partir de onde? Use nomes mais claras: fetchPage() downloadPage() Use um dicionário: fork, create, begin, open Linha de tabela?
  • Your code sucks, let’s fix it! Objects Calisthenics Regra #5 Não abreviar Benefícios: – Comunicação mais clara; – Facilita a busca por problemas ocultos.
  • Your code sucks, let’s fix it! Objects Calisthenics Adapted OC # 6 "Keep your classes small" small"
  • Your code sucks, let’s fix it! Objects Calisthenics Adapted OC # 6 "Mantenha suas classes "Mantenha pequenas" pequenas"
  • Your code sucks, let’s fix it! Objects Calisthenics Regra original: – 50 linhas por classe.
  • Your code sucks, let’s fix it! Objects Calisthenics – 200 linhas por classe (para incluir os blocos de documentação); – 10 metodos por classes; classes; – 15 classes por pacote/namespace/pasta; – De 15 a 20 linhas por método.
  • Your code sucks, let’s fix it! Objects Calisthenics Regra #6 Não abreviar Benefícios: – Responsabilidade única; – Métodos objetivos; – Pacotes/namespaces mais enxutos;
  • Your code sucks, let’s fix it! Objects Calisthenics Adapted OC # 7 "Limit the number of instance variables in a class (2 to 5)" 5)"
  • Your code sucks, let’s fix it! Objects Calisthenics Adaptada OC # 7 "Limite o número das variáveis de instância (máximo 5 )" )"
  • Your code sucks, let’s fix it! Objects Calisthenics Adapted Limitar em 5
  • Your code sucks, let’s fix it! Objects Calisthenics Regra #7 Limite o número das variáveis de instância (2 para 5 ) Benefícios: – Lista reduzida de dependências; – Mais fácil para fazer Mocking para testes.
  • Your code sucks, let’s fix it! Objects Calisthenics OC # 8 "Use first class collections" collections"
  • Your code sucks, let’s fix it! Objects Calisthenics OC # 8 "Use coleções de primeiro nível"
  • Your code sucks, let’s fix it! Objects Calisthenics Doctrine: ArrayCollection
  • Your code sucks, let’s fix it! Objects Calisthenics • Qualquer classe que contenha uma coleção (ou tenha esse propósito), não deve conter outras propriedades; • Encapsulamento de coleções primitivas (arrays); • Utilização de Interfaces Orientadas a Objetos: – Collections do Java; – SPL do PHP.
  • Your code sucks, let’s fix it! Objects Calisthenics Regra #8 Use coleções de primeiro nível Benefícios: – É possível implementar operações em coleções; – Utilizar métodos já existentes em interfaces pré-definidas.
  • Your code sucks, let’s fix it! Objects Calisthenics Adapted OC # 9 "Do not use getters/ setters" setters" * Use them if you code PHP
  • Your code sucks, let’s fix it! Objects Calisthenics Adaptada OC # 9 "Não use métodos getter/setter" getter/setter" * Use para propriedades no código PHP
  • Your code sucks, let’s fix it! Objects Calisthenics
  • Your code sucks, let’s fix it! Objects Calisthenics ● ● Muitos frameworks utilizam os métodos getters e setters para inicializar variáveis, reduzindo código e evitando erros desnecessários. Não coloque nenhum tipo de regra de negócio nos getters e setters.
  • Your code sucks, let’s fix it! Objects Calisthenics Regra #9 Não use métodos getter/setter * Use para propriedades no código PHP Benefícios: – Operações de injetor ; – Encapsulamento das transformações
  • Your code sucks, let’s fix it! Objects Calisthenics Created OC # 10 (bonus!) "Document your code!" code!"
  • Your code sucks, let’s fix it! Objects Calisthenics Created OC # 10 (bonus!) "Documente seu código!" código!
  • Your code sucks, let’s fix it! Objects Calisthenics Uma nota sobre o custo de execução da função Marca todo para que não se perca nas mudanças Documentação gerada pela API do phpDocumentor
  • Your code sucks, let’s fix it! Objects Calisthenics Regra #10 (bonus!) Documente seu código! código! Benefícios: – Documentação automática por API; – Transmissão de "linha de pensamento"; – Evita confusões.
  • Your code sucks, let’s fix it! Objects Calisthenics Recaptulando: #1. Somente um nível de indentação por método; #2. Não utilize a palavra-chave 'eles'; 'eles'; #3. Encapsule os tipos primitivos e strings; #4. Somente um ponto por linha; linha; #5. Não abreviar; #6. Mantenha suas classes pequenas #7. Limite número das variáveis de instância (máximo 5); #8. Use coleções de primeiro nível; #9. Use métodos getter/setter; getter/setter; #10. Documente seu código.
  • Your code sucks, let’s fix it! Objects Calisthenics Perguntas? Marcelo Siqueira eu@marcelosiqueira.com.br @marcelosiqueira Obrigado!