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

Object Calisthenics

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

Object Calisthenics

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

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

Avatar for Marcos Medeiros

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!)