Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Refactoring na prática lidando com código legado

920 views

Published on

Código legado é aquele código com um valor imensurável, que não possui testes e que nós temos medo de estender novas funcionalidades. Toda responsabilidade de não cometer erros recai sobre seus ombros, a pressão sobre você aumenta e você deixa de acreditar em certezas. Se você já se sentiu assim e quer evitar ter cabelos brancos cedo, então você precisa assistir essa talk.

Published in: Technology
  • Wonderful slide, also...GROW YOU DOWNLINE FAST - Works with any mlm. Have dozens joining whatever mlm your doing today! Go to: www.mlmrc.com
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

Refactoring na prática lidando com código legado

  1. 1. Refactoring na Prática: Lidando com código legado
  2. 2. Kewerson Hugo @kewersonhugo
  3. 3. Código Legado?
  4. 4. Funciona
  5. 5. Importante
  6. 6. Possui Valor
  7. 7. De centavos por segundo
  8. 8. até milhões por hora
  9. 9. Sem Clean Code
  10. 10. Sem TESTES
  11. 11. Difícil de manter
  12. 12. Ou estender funcionalidade
  13. 13. Pressão
  14. 14. Medo
  15. 15. Dúvidas e hesitação
  16. 16. Eu já sofri
  17. 17. Primeiro emprego
  18. 18. Um "simples" PDV
  19. 19. Delphi
  20. 20. Testes? Kent who?
  21. 21. Testes? Kent who? Test, please!
  22. 22. Foi triste
  23. 23. E sem querer assustar
  24. 24. Mas você também vai
  25. 25. Brincadeira
  26. 26. Objetivo da talk
  27. 27. Como lidar com o código legado?
  28. 28. O código existente possui muito valor
  29. 29. Nunca reescreva o código do zero
  30. 30. Isso vai dar trabalho
  31. 31. Custa tempo e dinheiro
  32. 32. Cliente:
  33. 33. O código diz uma verdade
  34. 34. A regra do negócio
  35. 35. Você precisa de testes
  36. 36. Garantir que nada quebrou
  37. 37. Para extrair o comportamento
  38. 38. Só assim você terá segurança
  39. 39. E maximizando a segurança
  40. 40. Coragem para encarar
  41. 41. E utilizar Refactoring
  42. 42. Um livro feito pelos melhores
  43. 43. Melhorar a estrutura do código
  44. 44. Sem alterar o comportamento
  45. 45. Que transforma código feio (Bad Smells)
  46. 46. Em código limpo (Código Cheiroso)
  47. 47. São técnicas muito simples
  48. 48. Acumuladas melhoram muito
  49. 49. Vamos ver um exemplo
  50. 50. Gilded Rose Kata
  51. 51. function updateQuality() { for (var i = 0; i < this.items.length; i++) { if (this.items[i].name != 'Aged Brie' && this.items[i].name != 'Backstage pass') { if (this.items[i].quality > 0) { if (this.items[i].name != 'Sulfuras, Hand of Ragnaros') { this.items[i].quality = this.items[i].quality - 1; } } } else { if (this.items[i].quality < 50) { this.items[i].quality = this.items[i].quality + 1; if (this.items[i].name == 'Backstage pass') { if (this.items[i].sellIn < 11) { if (this.items[i].quality < 50) { this.items[i].quality = this.items[i].quality + 1; } } if (this.items[i].sellIn < 6) { if (this.items[i].quality < 50) { this.items[i].quality = this.items[i].quality + 1; } } } } } // Implementação...
  52. 52. function updateQuality() { for (var i = 0; i < this.items.length; i++) { if (this.items[i].name != 'Aged Brie' && this.items[i].name != 'Backstage pass') { if (this.items[i].quality > 0) { if (this.items[i].name != 'Sulfuras, Hand of Ragnaros') { this.items[i].quality = this.items[i].quality - 1; } } } else { if (this.items[i].quality < 50) { this.items[i].quality = this.items[i].quality + 1; if (this.items[i].name == 'Backstage pass') { if (this.items[i].sellIn < 11) { if (this.items[i].quality < 50) { this.items[i].quality = this.items[i].quality + 1; } } if (this.items[i].sellIn < 6) { if (this.items[i].quality < 50) { this.items[i].quality = this.items[i].quality + 1; } } } } } // Implementação...
  53. 53. Bloco do FOR é JUST ONE THING
  54. 54. function updateQuality() { for (var i = 0; i < this.items.length; i++) { if (this.items[i].name != 'Aged Brie' && this.items[i].name != 'Backstage pass') { if (this.items[i].quality > 0) { if (this.items[i].name != 'Sulfuras, Hand of Ragnaros') { this.items[i].quality = this.items[i].quality - 1; } } } else { if (this.items[i].quality < 50) { this.items[i].quality = this.items[i].quality + 1; if (this.items[i].name == 'Backstage pass') { if (this.items[i].sellIn < 11) { if (this.items[i].quality < 50) { this.items[i].quality = this.items[i].quality + 1; } } if (this.items[i].sellIn < 6) { if (this.items[i].quality < 50) { this.items[i].quality = this.items[i].quality + 1; } } } } } // Implementação...
  55. 55. function updateQuality() { for (var i = 0; i < this.items.length; i++) {
  56. 56. function updateQuality() { for (var i = 0; i < this.items.length; i++) { } }
  57. 57. function updateQuality() { for (var i = 0; i < this.items.length; i++) { } }
  58. 58. function updateQuality() { for (var i = 0; i < this.items.length; i++) { updateOneItem(items[i]); } }
  59. 59. function updateQuality() { for (var i = 0; i < this.items.length; i++) { updateOneItem(items[i]); } }
  60. 60. function updateQuality() { for (var i = 0; i < this.items.length; i++) { updateOneItem(items[i]); } }
  61. 61. function updateQuality() { for (var i = 0; i < this.items.length; i++) { updateOneItem(items[i]); } }
  62. 62. function updateQuality() { for (var i = 0; i < this.items.length; i++) { updateOneItem(items[i]); } }
  63. 63. function updateQuality() { for (var i = 0; i < this.items.length; i++) { updateOneItem(items[i]); } } function updateOneItem(item) { if (this.items[i].name != 'Aged Brie' && this.items[i].name != 'Backstage pass') { if (this.items[i].quality > 0) { if (this.items[i].name != 'Sulfuras, Hand of Ragnaros') { this.items[i].quality = this.items[i].quality - 1; } } } else { if (this.items[i].quality < 50) { this.items[i].quality = this.items[i].quality + 1; if (this.items[i].name == 'Backstage pass') { if (this.items[i].sellIn < 11) { if (this.items[i].quality < 50) { this.items[i].quality = this.items[i].quality + 1; } } // Implementação...
  64. 64. function updateQuality() { for (var i = 0; i < this.items.length; i++) { updateOneItem(items[i]); } } function updateOneItem(item) { if (this.items[i].name != 'Aged Brie' && this.items[i].name != 'Backstage pass') { if (this.items[i].quality > 0) { if (this.items[i].name != 'Sulfuras, Hand of Ragnaros') { this.items[i].quality = this.items[i].quality - 1; } } } else { if (this.items[i].quality < 50) { this.items[i].quality = this.items[i].quality + 1; if (this.items[i].name == 'Backstage pass') { if (this.items[i].sellIn < 11) { if (this.items[i].quality < 50) { this.items[i].quality = this.items[i].quality + 1; } } // Implementação...
  65. 65. function updateQuality() { for (var i = 0; i < this.items.length; i++) { updateOneItem(items[i]); } } function updateOneItem(item) { if (this.items[i].name != 'Aged Brie' && this.items[i].name != 'Backstage pass') { if (this.items[i].quality > 0) { if (this.items[i].name != 'Sulfuras, Hand of Ragnaros') { this.items[i].quality = this.items[i].quality - 1; } } } else { if (this.items[i].quality < 50) { this.items[i].quality = this.items[i].quality + 1; if (this.items[i].name == 'Backstage pass') { if (this.items[i].sellIn < 11) { if (this.items[i].quality < 50) { this.items[i].quality = this.items[i].quality + 1; } } // Implementação...
  66. 66. function updateOneItem(item) { if (this.items[i].name != 'Aged Brie' && this.items[i].name != if (this.items[i].quality > 0) { if (this.items[i].name != 'Sulfuras, Hand of Ragnaros') { this.items[i].quality = this.items[i].quality - 1; } } } // Implementação }
  67. 67. function updateOneItem(item) { if (this.items[i].name != 'Aged Brie' && this.items[i].name != if (this.items[i].quality > 0) { if (this.items[i].name != 'Sulfuras, Hand of Ragnaros') { this.items[i].quality = this.items[i].quality - 1; } } } // Implementação }
  68. 68. function updateOneItem(item) { if (item.name != 'Aged Brie' && item.name != 'Backstage if (item.quality > 0) { if (item.name != 'Sulfuras, Hand of Ragnaros') { item.quality = item.quality - 1; } } } // Implementação }
  69. 69. function updateOneItem(item) { if (item.name != 'Aged Brie' && item.name != 'Backstage if (item.quality > 0) { if (item.name != 'Sulfuras, Hand of Ragnaros') { item.quality = item.quality - 1; } } } // Implementação }
  70. 70. function updateQuality() { for (var i = 0; i < this.items.length; i++) { updateOneItem(items[i]); } } function updateOneItem(item) { if (item.name != 'Aged Brie' && item.name != 'Backstage pass') { if (item.quality > 0) { if (item.name != 'Sulfuras, Hand of Ragnaros') { item.quality = item.quality - 1; } } } // Implementação ...
  71. 71. JUST ONE THING!
  72. 72. Respeite as responsabilidade
  73. 73. Sempre rode os testes depois
  74. 74. Próximo exemplo
  75. 75. function updateOneItem(item) { if (item.name != 'Aged Brie' && item.name != 'Backstage pass') // Não Aged Brie E Não Backstage Pass ... } else { // É Aged Brie OU É Backstage Pass... } }
  76. 76. function updateOneItem(item) { if (item.name != 'Aged Brie' && item.name != 'Backstage pass') // Não Aged Brie E Não Backstage Pass ... } else { // É Aged Brie OU É Backstage Pass... } }
  77. 77. Condicionais negativas!?
  78. 78. Condicionais negativas!?
  79. 79. function updateOneItem(item) { if (item.name != 'Aged Brie' && item.name != 'Backstage pass') // Não Aged Brie E Não Backstage Pass ... } else { // É Aged Brie OU É Backstage Pass... } }
  80. 80. function updateOneItem(item) { if (item.name != 'Aged Brie' && item.name != 'Backstage pass') // Não Aged Brie E Não Backstage Pass ... } else { // É Aged Brie OU É Backstage Pass... } }
  81. 81. function updateOneItem(item) { if (item.name != 'Aged Brie' && item.name != 'Backstage pass') // Não Aged Brie E Não Backstage Pass ... } else { // É Aged Brie OU É Backstage Pass... } }
  82. 82. function updateOneItem(item) { if (item.name != 'Aged Brie' && item.name != 'Backstage pass') // Não Aged Brie E Não Backstage Pass ... } else { // É Aged Brie OU É Backstage Pass... } }
  83. 83. function updateOneItem(item) { if (item.name != 'Aged Brie' && item.name != 'Backstage pass') // Não Aged Brie E Não Backstage Pass ... } else { // É Aged Brie OU É Backstage Pass... } }
  84. 84. function updateOneItem(item) { if (item.name == 'Aged Brie' || item.name == 'Backstage pass') // Não Aged Brie E Não Backstage Pass ... } else { // É Aged Brie OU É Backstage Pass... } }
  85. 85. function updateOneItem(item) { if (item.name == 'Aged Brie' || item.name == 'Backstage pass') // Não Aged Brie E Não Backstage Pass ... } else { // É Aged Brie OU É Backstage Pass... } }
  86. 86. function updateOneItem(item) { if (item.name == 'Aged Brie' || item.name == 'Backstage pass') // Não Aged Brie E Não Backstage Pass ... } else { // É Aged Brie OU É Backstage Pass... } }
  87. 87. function updateOneItem(item) { if (item.name == 'Aged Brie' || item.name == 'Backstage pass') // É Aged Brie OU É Backstage Pass... } else { // Não Aged Brie E Não Backstage Pass ... } }
  88. 88. function updateOneItem(item) { if (item.name == 'Aged Brie' || item.name == 'Backstage pass') // É Aged Brie OU É Backstage Pass... } else { // Não Aged Brie E Não Backstage Pass ... } }
  89. 89. function updateOneItem(item) { if (item.name == 'Aged Brie' || item.name == 'Backstage pass') // É Aged Brie OU É Backstage Pass... } else { // Não Aged Brie E Não Backstage Pass ... } }
  90. 90. function updateOneItem(item) { if (item.name == 'Aged Brie' || item.name == 'Backstage pass') // É Aged Brie OU É Backstage Pass... } else { // Não Aged Brie E Não Backstage Pass ... } } Condicional mais simples
  91. 91. function updateOneItem(item) { if (item.name == 'Aged Brie' || item.name == 'Backstage pass') // É Aged Brie OU É Backstage Pass... } else { // Não Aged Brie E Não Backstage Pass ... } } E coerente com o bloco seguinte
  92. 92. Rode os testes
  93. 93. Não existe segredo:
  94. 94. 1 - Encontre o mau cheiro
  95. 95. 2 - Elimine-o
  96. 96. 3 - Rode os testes
  97. 97. 3 - Rode os testes
  98. 98. 3 - Rode os testes
  99. 99. 3 - Rode os testes
  100. 100. Refactoring é simples
  101. 101. Um último exemplo
  102. 102. if (item.name == 'Aged Brie' || item.name == 'Backstage pass') { if (item.quality < 50) { item.quality = item.quality + 1; if (item.name == 'Backstage pass') { if (item.sellIn < 11) { if (item.quality < 50) { item.quality = item.quality + 1; } } if (item.sellIn < 6) { if (item.quality < 50) { item.quality = item.quality + 1; } } } } } else { // Implementação }
  103. 103. if (item.name == 'Aged Brie' || item.name == 'Backstage pass') { if (item.quality < 50) { item.quality = item.quality + 1; if (item.name == 'Backstage pass') { if (item.sellIn < 11) { if (item.quality < 50) { item.quality = item.quality + 1; } } if (item.sellIn < 6) { if (item.quality < 50) { item.quality = item.quality + 1; } } } } } else { // Implementação }
  104. 104. Mesmo de antes
  105. 105. Bloco do IF também é JUST ONE THING
  106. 106. if (item.name == 'Aged Brie' || item.name == 'Backstage pass') { if (item.quality < 50) { item.quality = item.quality + 1; if (item.name == 'Backstage pass') { if (item.sellIn < 11) { if (item.quality < 50) { item.quality = item.quality + 1; } } if (item.sellIn < 6) { if (item.quality < 50) { item.quality = item.quality + 1; } } } } } else { // Implementação }
  107. 107. if (item.name == 'Aged Brie' || item.name == 'Backstage pass') { } else { // Implementação }
  108. 108. if (item.name == 'Aged Brie' || item.name == 'Backstage pass') { } else { // Implementação }
  109. 109. if (item.name == 'Aged Brie' || item.name == 'Backstage pass') { ????????????(item); } else { // Implementação }
  110. 110. if (item.name == 'Aged Brie' || item.name == 'Backstage pass') { ????????????(item); } else { // Implementação }
  111. 111. if (item.name == 'Aged Brie' || item.name == 'Backstage pass') { ????????????(item); } else { // Implementação } Qual nome escolher?
  112. 112. if (item.name == 'Aged Brie' || item.name == 'Backstage pass') { ????????????(item); } else { // Implementação }
  113. 113. if (item.name == 'Aged Brie' || item.name == 'Backstage pass') { ????????????(item); } else { // Implementação } Qual a responsabilidade?
  114. 114. if (item.name == 'Aged Brie' || item.name == 'Backstage pass') { updateAgedBrieOrBackstagePass(item); } else { // Implementação }
  115. 115. if (item.name == 'Aged Brie' || item.name == 'Backstage pass') { updateAgedBrieOrBackstagePass(item); } else { // Implementação }
  116. 116. if (item.name == 'Aged Brie' || this.item updateAgedBrieOrBackstagePass(item); } else { // Implementação }
  117. 117. if (item.name == 'Aged Brie' || th updateAgedBrieOrBackstagePass(item); } else { // Implementação }
  118. 118. if (item.name == 'Aged Brie' || th updateAgedBrieOrBackstagePass(item); } else { // Implementação }
  119. 119. OU e E no nome não é ONE THING
  120. 120. if (item.name == 'Aged Brie' || item.name == 'Backstage pass') { if (item.quality < 50) { item.quality = item.quality + 1; if (item.name == 'Backstage pass') { if (item.sellIn < 11) { if (item.quality < 50) { item.quality = item.quality + 1; } } if (item.sellIn < 6) { if (item.quality < 50) { item.quality = item.quality + 1; } } } } } else { // Implementação }
  121. 121. if (item.name == 'Aged Brie' || item.name == 'Backstage pass') { if (item.quality < 50) { item.quality = item.quality + 1; if (item.name == 'Backstage pass') { if (item.sellIn < 11) { if (item.quality < 50) { item.quality = item.quality + 1; } } if (item.sellIn < 6) { if (item.quality < 50) { item.quality = item.quality + 1; } } } } } else { // Implementação }
  122. 122. if (item.name == 'Aged Brie' || item.name == 'Backstage pass') { if (item.quality < 50) { item.quality = item.quality + 1; if (item.name == 'Backstage pass') { if (item.sellIn < 11) { if (item.quality < 50) { item.quality = item.quality + 1; } } if (item.sellIn < 6) { if (item.quality < 50) { item.quality = item.quality + 1; } } } } } else { // Implementação }
  123. 123. if (item.name == 'Aged Brie' || item.name == 'Backstage pass') { if (item.quality < 50) { item.quality = item.quality + 1; if (item.name == 'Backstage pass') { if (item.sellIn < 11) { if (item.quality < 50) { item.quality = item.quality + 1; } } if (item.sellIn < 6) { if (item.quality < 50) { item.quality = item.quality + 1; } } } } } else { // Implementação }
  124. 124. if (item.name == 'Aged Brie' || item.name == 'Backstage pass') { if (item.quality < 50) { item.quality = item.quality + 1; if (item.name == 'Backstage pass') { if (item.sellIn < 11) { if (item.quality < 50) { item.quality = item.quality + 1; } } if (item.sellIn < 6) { if (item.quality < 50) { item.quality = item.quality + 1; } } } } } else { // Implementação }
  125. 125. if (item.name == 'Aged Brie' || item.name == 'Backstage pass') { if (item.quality < 50) { item.quality = item.quality + 1; if (item.name == 'Backstage pass') { if (item.sellIn < 11) { if (item.quality < 50) { item.quality = item.quality + 1; } } if (item.sellIn < 6) { if (item.quality < 50) { item.quality = item.quality + 1; } } } } } else { // Implementação }
  126. 126. if (item.name == 'Aged Brie' || item.name == 'Backstage pass') { if (item.quality < 50) { item.quality = item.quality + 1; if (item.name == 'Backstage pass') { if (item.sellIn < 11) { if (item.quality < 50) { item.quality = item.quality + 1; } } if (item.sellIn < 6) { if (item.quality < 50) { item.quality = item.quality + 1; } } } } } else { // Implementação }
  127. 127. if (item.name == 'Aged Brie' || item.name == 'Backstage pass') { } else { // Implementação }
  128. 128. if (item.name == 'Aged Brie' || item.name == 'Backstage pass') { } else { // Implementação }
  129. 129. if (item.name == 'Aged Brie' || item.name == 'Backstage pass') { } else { // Implementação }
  130. 130. if (item.name == 'Aged Brie' ) { } else { // Implementação }
  131. 131. if (item.name == 'Aged Brie') { } else { // Implementação }
  132. 132. if (item.name == 'Aged Brie') { } else if (item.name == 'Backstage Pass') { else { // Implementação }
  133. 133. if (item.name == 'Aged Brie') { } else if (item.name == 'Backstage Pass') { else { // Implementação }
  134. 134. if (item.name == 'Aged Brie') { updateAgedBrie(item); } else if (item.name == 'Backstage Pass') { updateBackstagePass(item); else { // Implementação }
  135. 135. if (item.name == 'Aged Brie') { updateAgedBrie(item); } else if (item.name == 'Backstage Pass') { updateBackstagePass(item); else { // Implementação }
  136. 136. if (item.name == 'Aged Brie') { updateAgedBrie(item); } else if (item.name == 'Backstage Pass') { updateBackstagePass(item); else { // Implementação }
  137. 137. function updateAgedBrie(item) { if (item.quality < 50) item.quality = item.quality + 1; }
  138. 138. function updateAgedBrie(item) { if (item.quality < 50) item.quality = item.quality + 1; }
  139. 139. if (item.name == 'Aged Brie') { updateAgedBrie(item); } else if (item.name == 'Backstage Pass') { updateBackstagePass(item); else { // Implementação }
  140. 140. if (item.name == 'Aged Brie') { updateAgedBrie(item); } else if (item.name == 'Backstage Pass') { updateBackstagePass(item); else { // Implementação }
  141. 141. if (item.name == 'Aged Brie') { updateAgedBrie(item); } else if (item.name == 'Backstage Pass') { updateBackstagePass(item); else { // Implementação }
  142. 142. function updateBackstagePass(item) { if (item.quality < 50) { item.quality = item.quality + 1; if (item.name == 'Backstage pass') { if (item.sellIn < 11) { if (item.quality < 50) { item.quality = item.quality + 1; } } if (item.sellIn < 6) { if (item.quality < 50) { item.quality = item.quality + 1; } } } }
  143. 143. function updateBackstagePass(item) { if (item.quality < 50) { item.quality = item.quality + 1; if (item.name == 'Backstage pass') { if (item.sellIn < 11) { if (item.quality < 50) { item.quality = item.quality + 1; } } if (item.sellIn < 6) { if (item.quality < 50) { item.quality = item.quality + 1; } } } }
  144. 144. function updateBackstagePass(item) { if (item.quality < 50) { item.quality = item.quality + 1; if (item.sellIn < 11) { if (item.quality < 50) { item.quality = item.quality + 1; } } if (item.sellIn < 6) { if (item.quality < 50) { item.quality = item.quality + 1; } } }
  145. 145. function updateBackstagePass(item) { if (item.quality < 50) { item.quality = item.quality + 1; if (item.sellIn < 11) { if (item.quality < 50) { item.quality = item.quality + 1; } } if (item.sellIn < 6) { if (item.quality < 50) { item.quality = item.quality + 1; } } }
  146. 146. function updateBackstagePass(item) { if (item.quality < 50) { item.quality = item.quality + 1; if (item.sellIn < 11) { if (item.quality < 50) { item.quality = item.quality + 1; } } if (item.sellIn < 6) { if (item.quality < 50) { item.quality = item.quality + 1; } } } }
  147. 147. function updateBackstagePass(item) { if (item.quality < 50) { item.quality = item.quality + 1; if (item.sellIn < 11) { if (item.quality < 50) { item.quality = item.quality + 1; } } if (item.sellIn < 6) { if (item.quality < 50) { item.quality = item.quality + 1; } } } }
  148. 148. if (item.name == 'Aged Brie') { updateAgedBrie(item); } else if (item.name == 'Backstage Pass') { updateBackstagePass(item); else { // Implementação }
  149. 149. if (item.name == 'Aged Brie') { updateAgedBrie(item); } else if (item.name == 'Backstage Pass') { updateBackstagePass(item); else { // Implementação }
  150. 150. if (item.name == 'Aged Brie') { updateAgedBrie(item); } else if (item.name == 'Backstage Pass') { updateBackstagePass(item); else { // Implementação } O que muda?
  151. 151. if (item.name == 'Aged Brie') { updateAgedBrie(item); } else if (item.name == 'Backstage Pass') { updateBackstagePass(item); } else if (item.name == 'Enchanted Sword') { updateEnchantedSword(item); } else if (item.name == 'Potion') { updatePotion(item); } else { updateStandardItem(item); }
  152. 152. if (item.name == 'Aged Brie') { updateAgedBrie(item); } else if (item.name == 'Backstage Pass') { updateBackstagePass(item); } else if (item.name == 'Enchanted Sword') { updateEnchantedSword(item); } else if (item.name == 'Potion') { updatePotion(item); } else { updateStandardItem(item); }
  153. 153. if (item.name == 'Aged Brie') { updateAgedBrie(item); } else if (item.name == 'Backstage Pass') { updateBackstagePass(item); } else if (item.name == 'Enchanted Sword') { updateEnchantedSword(item); } else if (item.name == 'Potion') { updatePotion(item); } else { updateStandardItem(item); } Fácil de estender funcionalidades
  154. 154. E repare que incrível
  155. 155. if (item.name == 'Aged Brie') { updateAgedBrie(item); } else if (item.name == 'Backstage Pass') { updateBackstagePass(item); } else if (item.name == 'Enchanted Sword') { updateEnchantedSword(item); } else if (item.name == 'Potion') { updatePotion(item); } else { updateStandardItem(item); }
  156. 156. if (item.name == 'Aged Brie') { updateAgedBrie(item); } else if (item.name == 'Backstage Pass') { updateBackstagePass(item); } else if (item.name == 'Enchanted Sword') { updateEnchantedSword(item); } else if (item.name == 'Potion') { updatePotion(item); } else { updateStandardItem(item); }
  157. 157. if (item.name == 'Aged Brie') { updateAgedBrie(item); } else if (item.name == 'Backstage Pass') { updateBackstagePass(item); } else if (item.name == 'Enchanted Sword') { updateEnchantedSword(item); } else if (item.name == 'Potion') { updatePotion(item); } else { updateStandardItem(item); } Várias condicionais
  158. 158. if (item.name == 'Aged Brie') { updateAgedBrie(item); } else if (item.name == 'Backstage Pass') { updateBackstagePass(item); } else if (item.name == 'Enchanted Sword') { updateEnchantedSword(item); } else if (item.name == 'Potion') { updatePotion(item); } else { updateStandardItem(item); }
  159. 159. if (item.name == 'Aged Brie') { updateAgedBrie(item); } else if (item.name == 'Backstage Pass') { updateBackstagePass(item); } else if (item.name == 'Enchanted Sword') { updateEnchantedSword(item); } else if (item.name == 'Potion') { updatePotion(item); } else { updateStandardItem(item); } Com diferentes comportamentos
  160. 160. Podemos aplicar polimorfismo
  161. 161. Novos refactorings podem ser notados
  162. 162. O Refactoring ajuda no design
  163. 163. E não existe um limite
  164. 164. Cuidado
  165. 165. Seja Pragmático
  166. 166. Tudo possui um trade-off
  167. 167. Refatore até o necessário para cumprir o requisito
  168. 168. Considere os prazos
  169. 169. E não se esqueça de sempre testar!
  170. 170. Recomendação de Leitura:
  171. 171. https://goo.gl/wMJeQy
  172. 172. Obrigado!
  173. 173. E sério, IMPLEMENTEM TESTES!
  174. 174. Melhor forma de evitar a dor de cabeça
  175. 175. Obrigado!!!

×