Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Object Calisthenics

Object Calisthenics

Apresentação sobre Object Calisthenics (Calistenia de Objetos) feita na empresa Deliver IT.

Apresentação baseada na apresentação de @rdohms

Marcos Medeiros

February 19, 2021
Tweet

Other Decks in Technology

Transcript

  1. Marcos Medeiros Rodrigues • Tech Lead – Time PayGo 2.0

    • 10+ anos de desenvolvimento PHP • m4arcos
  2. Como saber se preciso melhorar meu código • É de

    fácil manutenção? • É legível? • É reutilizável? • É testável?
  3. Cal • is • then • ics - /ˌkaləsˈTHeniks/ Do

    grego "kallos" (beleza) e "sthenos" (força)
  4. Cal • is • then • ics - /ˌkaləsˈTHeniks/ Do

    grego "kallos" (beleza) e "sthenos" (força)
  5. Objects Calisthenics • Introduzido por Jeff Bay no livro Thought

    Works Anthology • Princípios de SOLID • Criado inicial para JAVA • Adaptado para PHP por Rafael Dohms (@rdohms)
  6. Mas quando encapsular? • Quando o seu tipo precisar de

    validações, regras de negócio ou comportamentos • Por exemplo: • CPF • E-mail • Números de Telefone/Celular • Lista de Status (Aprovado, Negado, Pendente...) • ...
  7. Benefícios • Type Hiting • Encapsulamento de regras de negócio

    • Previne duplicação de código • Value Obejcts do DDD
  8. Benefícios • Single Responsibility Principle (S em S.O.L.I.D) • Classe

    específica para filtrar, mapear, ordenar, etc...
  9. Regra #5 Apenas um ponto por linha Obs.: Essa regra

    não se aplica para objetos que utilizam FluentInterfaces/ Method ChainingPattern
  10. Lei de Demeter • Principio do Menor Conhecimento • Entidades

    só devem conversar com seus vizinhos diretos • Entidades nunca deverão depender de uma estrutura interna de um vizinho indireto • Entidades deverão apenas expor informações que serão usadas por outras entidades
  11. Regra #7 Evitar classes com mais de 200 linhas 10

    métodos por classe 15 classes por package
  12. • #1 - Apenas um nível de indentação por método

    • #2 - Não use ELSE! • #3 -Encapsule todos os dados primitivos • #4 - Coleções de Primeira Classe • #5 - Apenas um ponto por linha • #6 - Não abrevie! • #7 - Evitar classes com mais de 200 linhas • #8 - Não crie classe com mais de cinco instâncias de variáveis • #9 - Não utilize Getters e Setters (Tell, don't ask!)
  13. • #1 - Apenas um nível de indentação por método

    • #2 - Não use ELSE! • #3 -Encapsule todos os dados primitivos • #4 - Coleções de Primeira Classe • #5 - Apenas um ponto por linha • #6 - Não abrevie! • #7 - Evitar classes com mais de 200 linhas • #8 - Não crie classe com mais de cinco instâncias de variáveis • #9 - Não utilize Getters e Setters (Tell, don't ask!)