Objects calisthenics - Os 10 mandamentos do rei do código

Click here to load reader

  • date post

    29-Jun-2015
  • Category

    Technology

  • view

    286
  • download

    2

Embed Size (px)

description

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.

Transcript of Objects calisthenics - Os 10 mandamentos do rei do código

  • 1. Os 10 mandamento do Rei do cdigo! Objects Calisthenics

2. Marcelo Siqueira @marcelosiqueira marsiqueira +MarceloSiqueira marsiqueira marcelosiqueiraProgramador PHP e Python, Defensor de Software Livre e GNU/Linux, Empreendedor, Nerd e tomador de cerveja! 3. Essa palestra foi baseado nas palestras. 4. Guilherme Blanco @guilhermeblancoObject Calisthenics aplicado ao PHPEssa palestra foi baseado nas palestras. 5. Guilherme Blanco @guilhermeblancoObject Calisthenics aplicado ao PHPEssa palestra foi baseado nas palestras. Rafael Dohms @rdohmsYour code sucks, let's fix it! 6. LembreteEssa palestra ir falar sobre qualidade de cdigos! Ento, vamos agregar! 7. Meu cdigo agrega valor? 8. legvel?Meu cdigo agrega valor? 9. legvel?Meu cdigo agrega valor? testvel? 10. fcil a manuteno? legvel?Meu cdigo agrega valor? testvel? 11. fcil a manuteno? legvel?Meu cdigo agrega valor? reusvel? testvel 12. O que acham disso? 13. No agrega valor! 14. Ento, como podemos agregar no cdigo? 15. Object Calisthenics 16. calisthenics - substantivo - /kalsTHeniks/ Termo derivado do grego: "exerccio", "exerccio de relaxamento", "ginstica rtmica"Object Calisthenics 17. calisthenics - substantivo - /kalsTHeniks/ Termo derivado do grego: "exerccio", "exerccio de relaxamento", "ginstica rtmica"Object Calisthenics Uma variedade de exerccios simples e rtmicos para alcanar melhor qualidade de cdigo e OO. 18. Ento aqui est um exerccio que pode ajud-lo a internalizar princpios de um bom design orientado a objeto e, na verdade, us-las na vida real.--Jeff Bay 19. Ento aqui est um exerccio que pode ajud-lo a Importante: internalizar princpios de um bom design PHP != JAVA orientado a Algumas adaptaes devem ser feitas objeto e, na verdade, us-las na vida real.--Jeff Bay 20. O OC so nove (9) orientaes, regras, mandamentos, "bem" simples e que podem ser utilizadas em qualquer linguagem orientada a objetos. Mas para agregar mostraremos 10(dez) orientaes, regras, mandamentos. 21. O OC so nove (9) orientaes, regras, mandamentos, "bem" simples e que podem ser utilizadas Repetindo: em PHP !=linguagem qualquer JAVA orientada a objetos. Algumas adaptaes devem ser feitas Mas para agregar mostraremos 10(dez) orientaes, regras, mandamentos. 22. # 1 Mandamento "Somente um nvel de indentao por mtodo" mtodo" 23. # 1 Mandamento "Somente um nvel de indentao por mtodo" mtodo" Neologismo derivado da palavra inglesa "indentation", que significa "recuo". 24. 0 12 3 25. 0 12 3 26. Espao em branco 27. Espao em brancoLogica duplicada 28. 0 12 29. 0 12 30. IF de uma linha, operao simples 31. Return rpidoIF de uma linha, operao simples 32. Return rpidoIF de uma linha, operao simplesFuno nativa C, mais rpida. 33. Sempre podemos melhorar! 34. Interao rpidaMtodo reusvel 35. Interao rpidaRetorno aceitvel: expectativa/retornoMtodo reusvel 36. Interao rpidaRetorno aceitvel: expectativa/retornoMtodo reusvelMtodo matches, resultado true 37. #1 Mandamento Somente um nvel de indentao/recuo por mtodoBenefcios: Maior coeso; Reduz a complexidade ciclomtica; Mtodos acabam fazendo apenas uma coisa, como deve ser; Aumenta a reusabilidade. 38. # 2 Mandamento "No utilize a palavra-chave 'else'" 'else'" 39. Varivel intermediriaVarivel intermediria 40. Intermediria removidaRetorno rpido 41. #2 Mandamento No utilize a palavra-chave 'else'Benefcios: Ajuda a prevenir duplicao de cdigo; Reduz a complexidade ciclomtica; Faz o cdigo ficar mais limpo, passando por um nico caminho. 42. Adaptada# 3 Mandamento "Encapsule os tipos primitivos e strings" * se eles possurem comportamento 43. Operao incorreta 44. Operao incorreta 45. Agora pode encapsular todas as operaes relacionadas com a animao 46. Adaptada#3 Mandamento Encapsule os tipos primitivos e strings * se eles possurem comportamentoBenefcios: Ajuda a identificar o que deve ser um objeto; Induo de Tipo; Encapsulamento de operaes. 47. Adaptada# 4 Mandamento "Somente um ponto (arrow para o PHP) por linha" * cadeia getter ou uma interface fluente 48. propriedades so mais difceis de testarSem espao em branco 49. Interface fluente 50. Interface fluenteOperadores alinhados 51. Interface fluenteOperadores alinhadosSomente geters (nenhuma operao) 52. Adaptada#4 Mandamento Somente um ponto (arrow para o PHP) por linha * cadeia getter ou uma interface fluenteBenefcios: Legibilidade; Construo de testes facilitada (mocks); Mais fcil para depurar. 53. # 5 Madamento "No abreviar" 54. Por que voc abrevia? 55. Preguia de escrever o mesmo nome vrias vezes... Talvez isso indique duplicidade de cdigo! 56. - Preguia de escrever o nome do mtodo muito longo... Talvez isso indique que o seu mtodo faz mais de uma coisa. Isso deve ser separado em vrios mtodos ou at classes! 57. Mais do que uma responsabilidade? 58. Mais do que uma responsabilidade?comea a partir de onde? 59. Mais do que uma responsabilidade?comea a partir de onde?Use nomes mais claras: fetchPage() downloadPage() 60. Mais do que uma responsabilidade?comea a partir de onde?Use nomes mais claras: fetchPage() downloadPage()Use um dicionrio: fork, create, begin, open 61. Mais do que uma responsabilidade?comea a partir de onde?Use nomes mais claras: fetchPage() downloadPage()Use um dicionrio: fork, create, begin, open Linha de tabela? 62. #5 Mandamento No abreviarBenefcios: Comunicao mais clara; Facilita a busca por problemas ocultos. 63. Adaptada# 6 Mandamento "Mantenha suas classes "Mantenha pequenas" pequenas" 64. Regra original: 50 linhas por classe. 65. 200 linhas por classe (para incluir os blocos de documentao); 10 metodos por classes; classes; 15 classes por pacote/namespace/pasta; De 15 a 20 linhas por mtodo. 66. Adaptada #6 Mandamento Mantenha suas classes pequenasBenefcios: Responsabilidade nica; Mtodos objetivos; Pacotes/namespaces mais enxutos. 67. Adaptada# 7 Mandamento "Limite o nmero das variveis de instncia (mximo 5)" 5)" 68. AdaptedLimitar em 5 69. Adaptada #7 Mandamento Limite o nmero das variveis de instncia (2 para 5)Benefcios: Lista reduzida de dependncias; Mais fcil para fazer Mocking para testes. 70. # 8 Mandamento "Use colees de primeiro nvel" 71. Doctrine: ArrayCollection 72. Qualquer classe que contenha uma coleo (ou tenha esse propsito), no deve conter outras propriedades; Encapsulamento de colees primitivas (arrays); Utilizao de Interfaces Orientadas a Objetos: Collections do Java; SPL do PHP. 73. #8 Mandamento Use colees de primeiro nvelBenefcios: possvel implementar operaes em colees; Utilizar mtodos j existentes em interfaces pr-definidas. 74. Adaptada# 9 Mandamento "No use mtodos getter/setter" getter/setter" * Use para propriedades no cdigo PHP 75. Muitos frameworks utilizam os mtodos getters e setters para inicializar variveis, reduzindo cdigo e evitando erros desnecessrios.No coloque nenhum tipo de regra de negcio nos getters e setters. 76. Adaptada#9 Mandamento No use mtodos getter/setter * Use para propriedades no cdigo PHPBenefcios: Operaes de injetor ; Encapsulamento das transformaes. 77. Criada# 10 Mandamento "Documente seu cdigo!" cdigo! 78. Mais do que uma responsabilidade?comea a partir de onde?Use nomes mais claras: fetchPage() downloadPage()Use um dicionrio: fork, create, begin, open Linha de tabela? 79. Uma nota sobre o custo de execuo da funoMarca todo para que no se perca nas mudanasDocumentao gerada pela API do phpDocumentor 80. #10 Mandamento Documente seu cdigo! cdigo!Benefcios: Documentao automtica por API; Transmisso de "linha de pensamento"; Evita confuses. 81. Recaptulando: #1. Somente um nvel de indentao por mtodo; #2. No utilize a palavra-chave 'eles'; 'eles'; #3. Encapsule os tipos primitivos e strings; #4. Somente um ponto por linha; linha; #5. No abreviar; #6. Mantenha suas classes pequenas #7. Limite nmero das variveis de instncia (mximo 5); #8. Use colees de primeiro nvel; #9. Use mtodos getter/setter; getter/setter; #10. Documente seu cdigo. 82. Perguntas? @marcelosiqueira marsiqueira +MarceloSiqueira marsiqueira marcelosiqueira [email protected] [email protected]!