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 sem complicação!

649 views

Published on

A palavra 'Refactoring' deixa muitos de cabelo em pé, mas pode ser mais simples do que pensamos. Uma passagem pelas principais ferramentas que ajudam a mapear os gargalos de sua aplicação.

Published in: Technology

Refactoring sem complicação!

  1. 1. Refactoring "Mudar o código sem mudar o comportamento” - Martin Fowler phpConferece 2015
  2. 2. Refactoring "Mudar o código sem mudar o comportamento” - Martin Fowler phpConferece 2015 Negação
  3. 3. Refactoring Negação phpConferece 2015 O que não é refactoring ● Otimização e performance, não é refatoração. ● Intensificar o tratamento de erros e adicionar um defensive code, não é refatoração. ● Corrigir bugs encontrados pelo caminho, não é refatoração. ● Tornar o código mais testavel, não é refatoração. Embora que em uma refatoração tudo isso possa acontecer, Todas essas coisas não é refatoração propriamente dita.
  4. 4. Refactoring Motivação phpConferece 2015 Código é difícil de entender
  5. 5. Refactoring Motivação phpConferece 2015 Backlog de bugs crescente e bugs que voltam
  6. 6. Refactoring Motivação phpConferece 2015 Precisa sempre de mais tempo Sair tarde já virou rotina
  7. 7. Refactoring Análise phpConferece 2015 E agora ?
  8. 8. Refactoring Análise phpConferece 2015 Identifique os problemas Você não decide refatorar, você refatora porque é uma forma de tornar o seu código fácil de conviver.
  9. 9. Refactoring DICA phpConferece 2015
  10. 10. Refactoring Ferramentas phpConferece 2015 ??????????????????????????????
  11. 11. Refactoring Ferramentas phpConferece 2015 ● phpcpd - copy/paste detector ● phpmd - mess detector ● phpcs - code sniffer ● phpd - depend ● phpMetrics ● phploc ● phpunit ● behat Sebastian Bergmann Ferramentas
  12. 12. Refactoring Ferramentas phpConferece 2015 ● phpd - depend ● phpMetrics ● phploc ● phpunit Métrica e evolução
  13. 13. Refactoring Ferramentas phpConferece 2015 Desenvolvimento continuo ● phpcpd - copy/paste detector ● phpmd - mess detector ● phpcs - code sniffer ● phpunit ● behat
  14. 14. Refactoring Show me the code phpConferece 2015
  15. 15. Refactoring Show me the code phpConferece 2015 147 public function pesquisar() { 148 if ($this->input->post("servico")) { 149 $pesquisado = $this->input->post("servico"); 150 $buscas = str_getcsv($pesquisado, ","); 151 $servicos = array(); 152 $palavras = array(); 153 $tipos = array(); 154 $titulos = array(); 155 $categorias = array(); 156 $subcategorias = array(); 157 $locais = array(); 158 $areas= array(); 159 $resultadoTitulos = array(); 160 $resultadoTipos = array(); 161 $resultadoPalavras = array(); 162 $resultadoLocal = array(); 163 $resultadoArea = array(); 164 $idCategoria = array(); 165 $idSubcategoria = array(); 166 $idServico = array(); 167 $idCurso = ""; 168 $idLocal = array(); 169 $resultado = Array();
  16. 16. Refactoring Show me the code phpConferece 2015 171 foreach ($buscas as $id => $busca) { 172 $local = $this->Localidades_model->busquePorAlgoComo("local", trim($busca)); 173 $area = $this->Localidades_model->busquePorAlgoComo("area", trim($busca)); 174 175 $tipo = $this->Servicos_model->busquePorAlgoComo("tipo", trim($busca)); 176 $titulo = $this->Servicos_model->busquePorAlgoComo("titulo", trim($busca)); 177 $palavra = $this->Servicos_model->busquePorAlgoComo("palavras", trim($busca)); 178 179 $categoria = $this->Categorias_model->busquePorAlgoComo("nome", trim($busca)); 180 $subcategoria = $this->Subcategorias_model->busquePorAlgoComo("nome", trim($b 181 182 $servico = $this->Servicos_model->busquePorAlgoComo("descricao", trim($busca)); 183 184 if ($categoria) 185 array_push($categorias, $categoria); 186 187 if ($subcategoria) 188 array_push($subcategorias, $subcategoria); 189 190 if ($local) 191 array_push($locais, $local); 192 193 if ($area) 194 array_push($areas, $area);
  17. 17. Refactoring Show me the code phpConferece 2015 195 196 if ($servico) 197 array_push($servicos, $servico); 198 199 if ($tipo) 200 array_push($tipos, $tipo); 201 202 if ($titulo) 203 array_push($titulos, $titulo); 204 205 if ($palavra) 206 array_push($palavras, $palavra); 207 } 208 209 if ($locais) { 210 foreach ($locais[0] as $id => $local) { 211 array_push($resultadoLocal, $local["id"]); 212 } 213 } 214 215 if ($areas) { 216 foreach ($areas[0] as $id => $area) { 217 array_push($resultadoArea, $area["id"]); 218 } 219 }
  18. 18. Refactoring Show me the code phpConferece 2015 220 221 if ($tipos) { 222 foreach ($tipos[0] as $id => $tipo) { 223 array_push($resultadoTipos, $tipo["id"]); 224 } 225 } 226 227 if ($palavras) { 228 foreach ($palavras[0] as $id => $palavra) { 229 array_push($resultadoPalavras, $palavra["id"]); 230 } 231 } 232 233 if ($titulos) { 234 foreach ($titulos[0] as $id => $titulo) { 235 array_push($resultadoTitulos, $titulo["id"]); 236 } 237 } 238 239 240 if ($categorias) { 241 foreach ($categorias[0] as $id => $categoria) { 242 array_push($idCategoria, $categoria["id"]); 243 }
  19. 19. Refactoring Show me the code phpConferece 2015 244 foreach ($idCategoria as $id => $idC) { 245 $servicoC = $this->Servicos_model->busquePor("idCategoria", $idC); 246 foreach ($servicoC as $id => $idS) { 247 array_push($idServico, $idS["id"]); 248 } 249 } 250 } 251 252 253 if ($subcategorias) { 254 foreach ($subcategorias[0] as $id => $subcategoria) { 255 array_push($idSubcategoria, $subcategoria["id"]); 256 } 257 foreach ($idSubcategoria as $id => $idS) { 258 $servicoS = $this->Servicos_model->busquePor("idSubcategoria", $idS); 259 260 foreach ($servicoS as $id => $idS) { 261 array_push($idServico, $idS["id"]); 262 } 263 } 264 } 265 266 if ($servicos) { 267 foreach ($servicos[0] as $id => $servico) { 268 array_push($idServico, $servico["id"]); 269 } 270 }
  20. 20. Refactoring Show me the code phpConferece 2015 271 272 273 if (!empty($resultadoArea) && !empty($resultadoLocal)) { 274 $idLocal = array_intersect($resultadoLocal, $resultadoArea); 275 } else { 276 277 if ($resultadoLocal) 278 $idLocal = $resultadoLocal; 279 280 if ($resultadoArea) 281 $idLocal = $resultadoArea; 282 } 283 284 285 if ($idLocal) { 286 foreach ($idLocal as $id => $idS) { 287 $servicoS = $this->Servicos_model->busquePor("idLocal", $idS); 288 foreach ($servicoS as $id => $idS) { 289 array_push($idServico, $idS["id"]); 290 } 291 } 292 } 293
  21. 21. Refactoring Show me the code phpConferece 2015 294 295 if (!empty($resultadoPalavras) && !empty($resultadoTitulos) && !empty($resultadoTipos) 296 $idCurso = array_intersect($resultadoPalavras, $resultadoTitulos); 297 $idCurso = array_intersect($idCurso, $resultadoTipos); 298 } else { 299 300 if ($resultadoPalavras) 301 $idCurso = $resultadoPalavras; 302 303 if ($resultadoTitulos) 304 $idCurso = $resultadoTitulos; 305 306 if ($resultadoTipos) 307 $idCurso = $resultadoTipos; 308 } 309 310 311 if ($idCurso) { 312 foreach ($idCurso as $idC) { 313 array_push($idServico, $idC); 314 } 315 } 316 317
  22. 22. Refactoring Show me the code phpConferece 2015 318 $idServico = array_unique($idServico); 319 320 foreach ($idServico as $id => $idS) { 321 $servicoS = $this->Servicos_model->busquePor("id", $idS); 322 array_push($resultado, $servicoS[0]); 323 } 324 325 foreach ($resultado as $id => $servico) { 326 327 $categoria = $this->Categorias_model->busquePor("id", $servico["idCategoria"]); 328 $subcategoria = $this->Subcategorias_model->busquePor("id", $servico["idSubcateg 329 $local = $this->Localidades_model->busquePor("id", $servico["idLocal"]); 330 $instituicao = $this->Instituicao_model->busquePor("id", $servico["idInstituicao"]); 331 332 $resultado[$id]["idInstituicao"] = $instituicao[0]; 333 $resultado[$id]["idCategoria"] = $categoria[0]; 334 $resultado[$id]["idSubcategoria"] = $subcategoria[0]; 335 $resultado[$id]["idLocal"] = $local[0]; 336 } 337 $data["pesquisado"] = $pesquisado; 338 $data["total"] = count($resultado); 339 $data["servicos"] = $resultado; 340 $this->load->view('servicos/resultado', $data); 341 } else { 342 $this->load->view('servicos/pesquisar'); 343 } 344 // die(var_dump($data)); FIM!
  23. 23. Refactoring PHPD phpConferece 2015 PHPD - Depend É um analisador de código que gera um grande conjunto de métricas, estas ajudam a identificar as partes de uma aplicação onde uma refatoração de código deve ser aplicada. $ composer require "pdepend/pdepend:*"
  24. 24. Refactoring PHPD phpConferece 2015 PHPD - Depend http://www.objectmentor.com/resources/articles/oodmetrc.pdf
  25. 25. Refactoring PHPLOC phpConferece 2015 PHPLOC É um rápido medidor do tamanho e da estrutura de um projeto $ composer require "phploc/phploc:*"
  26. 26. Refactoring PHPMetrics phpConferece 2015 PHPMetrics Fornece diversas métricas sobre projetos. $ composer require "halleck45/phpmetrics:*" http://www.phpmetrics.org/documentation/how-to-read-report.html#report-abstractness
  27. 27. Refactoring PHPUnit phpConferece 2015 PHPUnit É um framework open source para testes automatizados $ composer require "phpunit/phpunit:*" $ ./vendor/bin/phpunit application/tests PHPUnit 4.8.18 by Sebastian Bergmann and contributors. ........................................................................................ (90 / 471) ........................................................................................ (180 / 471) ........................................................................................ (270 / 471) ........................................................................................ (360 / 471) ........................................................................................ (450 / 471) ................... (471 / 471) Time: 433 ms, Memory: 5.25Mb OK (471 tests, 692 assertions)
  28. 28. Refactoring PHPUnit phpConferece 2015 PHPUnit https://phpunit.de/manual/current/pt_br/code-coverage-analysis.html
  29. 29. Refactoring PHPUnit phpConferece 2015 PHPUnit Usado a qualquer parte da vida de um projeto ● Testes para projeto existente sem testes ● Testes para projeto novo Uhuuu o/ ● Testes para projeto existente com testes
  30. 30. Refactoring DICA phpConferece 2015
  31. 31. Refactoring PHPCS phpConferece 2015 PHPCS - Code Sniffer Detecta violações de padrão. é uma ferramenta essencial de desenvolvimento que garante que o seu código permanece limpo e consistente $ composer require "squizlabs/php_codesniffer:*"
  32. 32. Refactoring PHPCS phpConferece 2015 PSR-2: Guia de Estilo de Codificação http://www.php-fig.org/psr/psr-2/pt-br/ PHPCS - Code Sniffer
  33. 33. Refactoring PHPCS phpConferece 2015 $ ./vendor/bin/phpcs ./application/controllers/servicos.php FILE: ...ar/www/phpconference/before/application/controllers/servicos.php ---------------------------------------------------------------------- FOUND 29 ERRORS AND 50 WARNINGS AFFECTING 65 LINES ——————————————————————————————————— 139 | ERROR | [x] Opening brace should be on a new line 164 | WARNING | [ ] Line exceeds 85 characters; contains 92 characters 165 | WARNING | [ ] Line exceeds 85 characters; contains 90 characters 167 | WARNING | [ ] Line exceeds 85 characters; contains 87 characters 168 | WARNING | [ ] Line exceeds 85 characters; contains 91 characters 169 | WARNING | [ ] Line exceeds 85 characters; contains 94 characters 171 | WARNING | [ ] Line exceeds 85 characters; contains 94 characters 172 | WARNING | [ ] Line exceeds 85 characters; contains 100 characters 174 | WARNING | [ ] Line exceeds 85 characters; contains 95 characters 176 | WARNING | [x] Inline control structures are discouraged 179 | WARNING | [x] Inline control structures are discouraged 182 | WARNING | [x] Inline control structures are discouraged 185 | WARNING | [x] Inline control structures are discouraged 188 | WARNING | [x] Inline control structures are discouraged
  34. 34. Refactoring PHPCS phpConferece 2015 191 | WARNING | [x] Inline control structures are discouraged 194 | WARNING | [x] Inline control structures are discouraged 197 | WARNING | [x] Inline control structures are discouraged 237 | WARNING | [ ] Line exceeds 85 characters; contains 86 characters 250 | WARNING | [ ] Line exceeds 85 characters; contains 89 characters 269 | WARNING | [x] Inline control structures are discouraged 272 | WARNING | [x] Inline control structures are discouraged 287 | WARNING | [ ] Line exceeds 85 characters; contains 101 characters 292 | WARNING | [x] Inline control structures are discouraged 295 | WARNING | [x] Inline control structures are discouraged 298 | WARNING | [x] Inline control structures are discouraged 319 | WARNING | [ ] Line exceeds 85 characters; contains 95 characters 320 | WARNING | [ ] Line exceeds 85 characters; contains 104 characters 321 | WARNING | [ ] Line exceeds 85 characters; contains 88 characters 322 | WARNING | [ ] Line exceeds 85 characters; contains 100 characters 336 | ERROR | [x] Line indented incorrectly; expected at least 8 spaces, found 0 ---------------------------------------------------------------------- PHPCBF CAN FIX THE 28 MARKED SNIFF VIOLATIONS AUTOMATICALLY ----------------------------------------------------------------------
  35. 35. Refactoring PHPCBF phpConferece 2015 $ ./vendor/bin/phpcbf ./application/controllers/servicos.php Changing into directory /var/www/phpconference/after/application/controllers Processing servicos.php [PHP => 4070 tokens in 401 lines]... DONE in 248ms (28 fixable violations) => Fixing file: 0/28 violations remaining [made 4 passes]... DONE in 1.04 secs Patched 1 file Time: 1.39 secs; Memory: 15.75Mb 173 | WARNING | Line exceeds 85 characters; contains 88 characters 174 | WARNING | Line exceeds 85 characters; contains 86 characters 177 | WARNING | Line exceeds 85 characters; contains 87 characters 178 | WARNING | Line exceeds 85 characters; contains 90 characters 180 | WARNING | Line exceeds 85 characters; contains 90 characters 181 | WARNING | Line exceeds 85 characters; contains 96 characters 183 | WARNING | Line exceeds 85 characters; contains 91 characters 306 | WARNING | Line exceeds 85 characters; contains 97 characters 340 | WARNING | Line exceeds 85 characters; contains 91 characters 341 | WARNING | Line exceeds 85 characters; contains 100 characters 343 | WARNING | Line exceeds 85 characters; contains 96 characters
  36. 36. Refactoring PHPCPD phpConferece 2015 PHPCPD - Copy/Paste Detector É um Copy / Paste Detector (CPD) para código PHP. Faz uma varredura em busca de código duplicado. $ composer require "sebastian/phpcpd:*" $ ./vendor/bin/phpcpd --min-lines=3 ./application/controllers/servicos.php phpcpd 2.0.2 by Sebastian Bergmann. Found 1 exact clones with 15 duplicated lines in 1 files: - /var/www/phpconference/before/application/controllers/servicos.php:22-36 /var/www/phpconference/before/application/controllers/servicos.php:101-116 3.67% duplicated lines out of 409 total lines of code. Time: 135 ms, Memory: 6.50Mb
  37. 37. Refactoring PHPCPD phpConferece 2015 22 foreach ($servicos as $id => $servico) { 23 24 $categoria = $this->Categorias_model->busquePor("id", $servico["idCategoria"]); 25 $subcategoria = $this->Subcategorias_model->busquePor("id", $servico["idSubcategoria"] 26 $local = $this->Localidades_model->busquePor("id", $servico["idLocal"]); 27 $instituicao = $this->Instituicao_model->busquePor("id", $servico["idInstituicao"]); 28 29 $servicos[$id]["idInstituicao"] = $instituicao[0]; 30 $servicos[$id]["idCategoria"] = $categoria[0]; 31 $servicos[$id]["idSubcategoria"] = $subcategoria[0]; 32 $servicos[$id]["idLocal"] = $local[0]; 33 } 34 35 $data["servicos"] = $servicos; 36 $this->template->load('template', "servicos/{$usuario->perfil}/listar", $data); $ ./vendor/bin/phpcpd --min-lines=3 ./application/controllers/servicos.php phpcpd 2.0.2 by Sebastian Bergmann. 0.00% duplicated lines out of 407 total lines of code. Time: 111 ms, Memory: 6.25Mb PHPCPD - Copy/Paste Detector Encapsule o código duplicado em método com nome apropriado.
  38. 38. Refactoring PHPMD phpConferece 2015 PHPMD - Mess Detector Busca por problemas em potencial, podem ser coisas como : ● Possíveis erros; ● Código suboptimal; ● Expressões complicadas; ● Parâmetros , métodos ou propriedades não utilizados; $ composer require "phpmd/phpmd:*"
  39. 39. Refactoring PHPMD phpConferece 2015 $ ./vendor/bin/phpmd ./application/controllers/servicos.php text codesize,unusedcod .servicos.php:139 The method pesquisar() has a Cyclomatic Complexity of 48. The configured cyclomatic complexity threshold is 10. .servicos.php:139 The method pesquisar() has an NPath complexity of 29083180897. The configured NPath complexity threshold is 200. .servicos.php:139 The method pesquisar() has 199 lines of code. Current threshold is set to 100. Avoid really long methods. .servicos.php:267 The method pesquisar uses an else expression. Else is never necessary and you can simplify the code to work without else. .servicos.php:290 The method pesquisar uses an else expression. Else is never necessary and you can simplify the code to work without else. .servicos.php:333 The method pesquisar uses an else expression. Else is never necessary and you can simplify the code to work without else
  40. 40. Refactoring phpConferece 2015 PHPMD Else is never necessary 147 public function pesquisar() { 148 if ($this->input->post("servico")) { … 193 linhas depois 341 } else { 342 $this->load->view('servicos/resultado', $data); 343 } 344 //die(var_dump($data); 345 }
  41. 41. Refactoring phpConferece 2015 PHPMD Else is never necessary 147 public function pesquisar() { 148 if ( ! $this->input->post("servico")) { 149 $this->load->view('servicos/resultado', $data); 150 } 193 linhas depois 345 }
  42. 42. Refactoring phpConferece 2015 PHPMD Cyclomatic Complexity NPath complexity of 29083180897 172 foreach($buscas as $id => $busca) { 44 linhas depois 216 } 219 foreach($locais[0] as $id => $local) { 220 array_push($resultadoLocal, $local[“id”]) 221 } 6 253 foreach($idCategoria as $id => $idC) { 254 $servicoC = $this->Servicos_modell- >busquePor("idCategoria", $idC); 255 foreach ($servicoC as $id => $idS) { 256 array_push($idServico, $idS["id"]); 257 } 258 } 256 } 2
  43. 43. Refactoring phpConferece 2015 PHPMD Cyclomatic Complexity NPath complexity of 29083180897 18 foreach($x as $i => $y) { … }
  44. 44. Refactoring Ferramentas phpConferece 2015
  45. 45. Refactoring Antes phpConferece 2015 147 public function pesquisar() { 148 if ($this->input->post("servico")) { 149 $pesquisado = $this->input->post("servico"); 150 $buscas = str_getcsv($pesquisado, ","); 151 $servicos = array(); 152 $palavras = array(); 153 $tipos = array(); 154 $titulos = array(); 155 $categorias = array(); 156 $subcategorias = array(); 157 $locais = array(); 158 $areas= array(); 159 $resultadoTitulos = array(); 160 $resultadoTipos = array(); 161 $resultadoPalavras = array(); 162 $resultadoLocal = array(); 163 $resultadoArea = array(); 164 $idCategoria = array(); 165 $idSubcategoria = array(); 166 $idServico = array(); 167 $idCurso = ""; 168 $idLocal = array(); 169 $resultado = Array(); 170 171 foreach ($buscas as $id => $busca) { 172 $local = $this->Localidades_model->busquePorAlgoComo("local", trim($busca)); 173 $area = $this->Localidades_model->busquePorAlgoComo("area", trim($busca)); 174 175 $tipo = $this->Servicos_model->busquePorAlgoComo("tipo", trim($busca)); 176 $titulo = $this->Servicos_model->busquePorAlgoComo("titulo", trim($busca)); 177 $palavra = $this->Servicos_model->busquePorAlgoComo("palavras", trim($busca)); 178 179 $categoria = $this->Categorias_model->busquePorAlgoComo("nome", trim($busca)); 180 $subcategoria = $this->Subcategorias_model->busquePorAlgoComo("nome", trim($busca)); 181 182 $servico = $this->Servicos_model->busquePorAlgoComo("descricao", trim($busca)); 183 184 if ($categoria) 185 array_push($categorias, $categoria); 186 187 if ($subcategoria) 188 array_push($subcategorias, $subcategoria); 189 190 if ($local) 191 280 if ($resultadoArea) 281 $idLocal = $resultadoArea; 282 } 283 284 285 if ($idLocal) { 286 foreach ($idLocal as $id => $idS) { 287 $servicoS = $this->Servicos_model->busqu 288 foreach ($servicoS as $id => $idS) { 289 array_push($idServico, $idS["id"]); 290 } 291 } 292 } 293 294 295 if (!empty($resultadoPalavras) && !empty($result 296 $idCurso = array_intersect($resultadoPalavras 297 $idCurso = array_intersect($idCurso, $resultad 298 } else { 299 300 if ($resultadoPalavras) 301 $idCurso = $resultadoPalavras; 302 303 if ($resultadoTitulos) 304 $idCurso = $resultadoTitulos; 305 306 if ($resultadoTipos) 307 $idCurso = $resultadoTipos; 308 } 309 310 311 if ($idCurso) { 312 foreach ($idCurso as $idC) { 313 array_push($idServico, $idC); 314 } 315 } 316 317 } 319 320 foreach ($idServico as $id => $idS) { 321 $servicoS = $this->Servicos_model->busquePor("id", $idS); 322 array_push($resultado, $servicoS[0]); 323 } 324 325 foreach ($resultado as $id => $servico) { 326 327 $categoria = $this->Categorias_model->busquePor("id", $servico["idCategoria"]); 328 $subcategoria = $this->Subcategorias_model->busquePor("id", $servico["idSubcategoria"]); 329 $local = $this->Localidades_model->busquePor("id", $servico["idLocal"]); 330 $instituicao = $this->Instituicao_model->busquePor("id", $servico["idInstituicao"]); 331 332 $resultado[$id]["idInstituicao"] = $instituicao[0]; 333 $resultado[$id]["idCategoria"] = $categoria[0]; 334 $resultado[$id]["idSubcategoria"] = $subcategoria[0]; 335 $resultado[$id]["idLocal"] = $local[0]; 336 } 337 $data["pesquisado"] = $pesquisado; 338 $data["total"] = count($resultado); 339 $data["servicos"] = $resultado; 340 $this->load->view('servicos/resultado', $data); 341 } else { 342 $this->load->view('servicos/pesquisar'); 343 } 344 // die(); 345 318 $idServico = array_unique($idServico); 319 320 foreach ($idServico as $id => $idS) { 321 $servicoS = $this->Servicos_model->busquePor("id", $idS); 322 array_push($resultado, $servicoS[0]); 323 } 324 325 foreach ($resultado as $id => $servico) { 326 318 $idServico = array_unique($idServico); 319 320 foreach ($idServico as $id => $idS) { 321 $servicoS = $this->Servicos_model->busquePor("id", $idS); 322 array_push($resultado, $servicoS[0]); 323 } 324 325 foreach ($resultado as $id => $servico) { 326 327 $categoria = $this->Categorias_model->busquePor("id", $servico["idCatego 328 $subcategoria = $this->Subcategorias_model->busquePor("id", $servico["id 329 $local = $this->Localidades_model->busquePor("id", $servico["idLocal"]); 330 $instituicao = $this->Instituicao_model->busquePor("id", $servico["idInstituic 331 332 $resultado[$id]["idInstituicao"] = $instituicao[0];
  46. 46. Refactoring Depois phpConferece 2015 144 public function pesquisar() 145 { 146 if (!$this->input->post("servico")) { 147 $this->load->view('servicos/pesquisar'); 148 } 149 150 $pesquisado = $this->input->post("servico"); 151 $buscas = str_getcsv($pesquisado, ","); 152 153 $locais = $this->Localidades_model->busqueLocaisPorPalavraChave($buscas); 154 $servicos = $this->Servicos_model->busqueServicosPorPalavraChave($buscas); 155 $categorias = $this->Categorias_model->busqueCategoriasPorPalavraChave($buscas); 156 $subcategorias = $this->Subcategorias_model->busqueSubategoriasPorPalavraChave($b 157 158 $servicosEncontrados = $this->Servicos_model->arranjeServicosEncontrados( 159 $locais, 160 $servicos, 161 $categorias, 162 $subcategorias 163 ); 164 165 $servicos = $this->Instituicao_model->asssocieInstituicoesServicos($servicosEncontrados 166 167 $resultado["pesquisado"] = $pesquisado; 168 $resultado["total"] = count($servicos); 169 $resultado["servicos"] = $servicos; 170 $this->load->view('servicos/resultado', $resultado);
  47. 47. Refactoring Depois phpConferece 2015 144 public function pesquisar() 145 { 146 if (!$this->input->post("servico")) { 147 $this->load->view('servicos/pesquisar'); 148 } 149 150 $pesquisado = $this->input->post("servico"); 151 $buscas = str_getcsv($pesquisado, ","); 152 153 $locais = $this->Localidades_model->busqueLocaisPorPalavraChave($buscas); 154 $servicos = $this->Servicos_model->busqueServicosPorPalavraChave($buscas); 155 $categorias = $this->Categorias_model->busqueCategoriasPorPalavraChave($buscas); 156 $subcategorias = $this->Subcategorias_model->busqueSubategoriasPorPalavraChave($b 157 158 $servicosEncontrados = $this->Servicos_model->arranjeServicosEncontrados( 159 $locais, 160 $servicos, 161 $categorias, 162 $subcategorias 163 ); 164 165 $servicos = $this->Instituicao_model->asssocieInstituicoesServicos($servicosEncontrados 166 167 $resultado["pesquisado"] = $pesquisado; 168 $resultado["total"] = count($servicos); 169 $resultado["servicos"] = $servicos; 170 $this->load->view('servicos/resultado', $resultado);
  48. 48. Refactoring Conclusão phpConferece 2015 ● Use e abuse das ferramentas disponíveis. ● Proteja-se de cometer erros ao fazer testes. ● Faça mudanças estruturais em pequenos passos. ● Faça em etapas independentes e seguras. Os padrões e as ferramentas de refatoração modernas tornam a refatoração fácil, segura e barata, aproveite e comece a melhorar seu código já !!! Refatoração é simples = )
  49. 49. Refactoring Conclusão phpConferece 2015 Perguntas ?
  50. 50. Thamara Hessel Obrigada =) thamara.hessel@gmail.com fb/ThamaraHessel tw/ThamaraHessel

×