refactoring sem complicação!

Post on 09-Jan-2017

588 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

top related