Post on 09-Jan-2017
Refactoring "Mudar o código sem mudar o comportamento”
- Martin Fowler
phpConferece 2015
Refactoring "Mudar o código sem mudar
o comportamento”- Martin Fowler
phpConferece 2015
Negação
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 possaacontecer, Todas essas coisas não é refatoração
propriamente dita.
Refactoring
Motivação
phpConferece 2015
Código é difícil de entender
Refactoring
Motivação
phpConferece 2015
Backlog de bugs crescente
e bugs que voltam
Refactoring
Motivação
phpConferece 2015
Precisa sempre de mais tempo
Sair tarde já virou rotina
Refactoring
Análise
phpConferece 2015
E agora ?
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.
Refactoring
DICA
phpConferece 2015
Refactoring
Ferramentas
phpConferece 2015
??????????????????????????????
Refactoring
Ferramentas
phpConferece 2015
● phpcpd - copy/paste detector● phpmd - mess detector● phpcs - code sniffer● phpd - depend● phpMetrics● phploc ● phpunit ● behat Sebastian Bergmann
Ferramentas
Refactoring
Ferramentas
phpConferece 2015
● phpd - depend● phpMetrics● phploc ● phpunit
Métrica e evolução
Refactoring
Ferramentas
phpConferece 2015
Desenvolvimento continuo
● phpcpd - copy/paste detector● phpmd - mess detector● phpcs - code sniffer● phpunit ● behat
Refactoring
Show me the code
phpConferece 2015
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();
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($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 array_push($locais, $local); 192 193 if ($area) 194 array_push($areas, $area);
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 }
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 }
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 }
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
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
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["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(var_dump($data)); 345 }
FIM!
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:*"
Refactoring
PHPD
phpConferece 2015
PHPD - Depend
http://www.objectmentor.com/resources/articles/oodmetrc.pdf
Refactoring
PHPLOC
phpConferece 2015
PHPLOC
É um rápido medidor do tamanho e da estrutura de um projeto
$ composer require "phploc/phploc:*"
Refactoring
PHPMetrics
phpConferece 2015
PHPMetricsFornece diversas métricas sobre projetos.
$ composer require "halleck45/phpmetrics:*"
http://www.phpmetrics.org/documentation/how-to-read-report.html#report-abstractness
Refactoring
PHPUnit
phpConferece 2015
PHPUnitÉ um framework open source para testes automatizados
$ composer require "phpunit/phpunit:*"
$ ./vendor/bin/phpunit application/testsPHPUnit 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)
Refactoring
PHPUnit
phpConferece 2015
PHPUnit
https://phpunit.de/manual/current/pt_br/code-coverage-analysis.html
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
Refactoring
DICA
phpConferece 2015
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:*"
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
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
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----------------------------------------------------------------------
Refactoring
PHPCBF
phpConferece 2015
$ ./vendor/bin/phpcbf ./application/controllers/servicos.php
Changing into directory /var/www/phpconference/after/application/controllersProcessing 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 secsPatched 1 fileTime: 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
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.phpphpcpd 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
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.phpphpcpd 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.
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:*"
Refactoring
PHPMD
phpConferece 2015
$ ./vendor/bin/phpmd ./application/controllers/servicos.php text codesize,unusedcode,naming,cleancode,design,controversial
.servicos.php:139The method pesquisar() has a Cyclomatic Complexity of 48.The configured cyclomatic complexity threshold is 10..servicos.php:139The method pesquisar() has an NPath complexity of 29083180897. The configured NPath complexity threshold is 200..servicos.php:139The method pesquisar() has 199 lines of code. Current threshold is set to 100. Avoid really long methods..servicos.php:267The method pesquisar uses an else expression. Else is never necessary and you can simplify the code to work without else..servicos.php:290The method pesquisar uses an else expression. Else is never necessary and you can simplify the code to work without else..servicos.php:333The method pesquisar uses an else expression. Else is never necessary and you can simplify the code to work without else
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 }
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 depois345 }
Refactoring
phpConferece 2015
PHPMD
Cyclomatic Complexity NPath complexity of 29083180897
172 foreach($buscas as $id => $busca) { 44 linhas depois216 }
219 foreach($locais[0] as $id => $local) {220 array_push($resultadoLocal, $local[“id”])221 }
6253 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
Refactoring
phpConferece 2015
PHPMD
Cyclomatic Complexity NPath complexity of 29083180897
18
foreach($x as $i => $y) { … }
Refactoring
Ferramentas
phpConferece 2015
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->busquePor("idLocal", $idS); 288 foreach ($servicoS as $id => $idS) { 289 array_push($idServico, $idS["id"]); 290 } 291 } 292 } 293 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 }
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["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 327 $categoria = $this->Categorias_model->busquePor("id", $servico["idCategoria"]); 328 $subcategoria = $this->Subcategorias_model->busquePor("id", $servico["idSubcategoria"]);
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["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];
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($buscas); 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); 171 }
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($buscas); 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); 171 }
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 arefatoração fácil, segura e barata, aproveite e comece a melhorar seu código já !!!
Refatoração é simples = )
Refactoring
Conclusão
phpConferece 2015
Perguntas ?
Thamara Hessel
Obrigada =)
thamara.hessel@gmail.comfb/ThamaraHesseltw/ThamaraHessel