46
Removendo o cheiro ruim do seu código Removendo o cheiro ruim do seu código Luís Otávio Cobucci Oblonczyk 22 de Outubro de 2011 6° SoLiSC

Removendo o cheiro ruim do seu código - SoLiSC 2011

Embed Size (px)

DESCRIPTION

Tem como objetivo mostrar técnicas preventivas e corretivas para criação/manutenção de projetos com código limpo e organizado.

Citation preview

Page 1: Removendo o cheiro ruim do seu código - SoLiSC 2011

Removendo o cheiro ruim do seu código

Removendo o cheiro ruim do seu código

Luís Otávio Cobucci Oblonczyk

22 de Outubro de 20116° SoLiSC

Page 2: Removendo o cheiro ruim do seu código - SoLiSC 2011

Luís Otávio Cobucci OblonczykLuís Otávio Cobucci Oblonczyk

● Desenvolvedor PHP na Softnex Tecnologia● Orientador no Senac TI● Doido por PHP desde 2003● Perfeccionista ao extremo =P

@lcobucci

http://about.me/lcobucci

Page 3: Removendo o cheiro ruim do seu código - SoLiSC 2011

Prepare-se

Page 4: Removendo o cheiro ruim do seu código - SoLiSC 2011

Você verá agora uma imagemforte, porém real...

Ela representa o seucódigo, sim você viudireito, é o SEU códigoaqui!

Page 5: Removendo o cheiro ruim do seu código - SoLiSC 2011
Page 6: Removendo o cheiro ruim do seu código - SoLiSC 2011

Sim, essa é a real visão do seu código,e só você não percebeu isso ainda

Page 7: Removendo o cheiro ruim do seu código - SoLiSC 2011

Sim, essa é a real visão do seu código,e só você não percebeu isso ainda

E não adianta querercolocar uma telinhabonitinha, porque láno fundo você sabecomo ele realmente é

Page 8: Removendo o cheiro ruim do seu código - SoLiSC 2011

Mas fique tranquilo, você temsalvação (e seu código também)

Page 9: Removendo o cheiro ruim do seu código - SoLiSC 2011

Mas fique tranquilo, você temsalvação (e seu código também)

Se você não está convencido,vou argumentar um pouco

Page 10: Removendo o cheiro ruim do seu código - SoLiSC 2011

Vida do código ruimVida do código ruim

● Nasce difícil de entender● Cada manutenção gera uma (ou mais) falhas● Baixa produtividade devido a confusão absurda

existente● Surgem novos colaboradores na esperança de

que com mais gente tenha mais produtividade● Pressão na equipe● Mais falhas são criadas

Page 11: Removendo o cheiro ruim do seu código - SoLiSC 2011

Vida do código ruimVida do código ruim

● Equipe revoltada propõe solução: jogar tudo no lixo e começar novamente

● Divisão da equipe, os melhores vão modelar o novo código enquanto os outros sofrem pra manter o antigo

● Muito tempo se passa até que o novo entra no lugar do antigo, muitas pessoas não estão nem mais na empresa.

● Os colaboradores atuais exigem refazer o sistema porque o código está uma porcaria novamente.

Page 12: Removendo o cheiro ruim do seu código - SoLiSC 2011

Alguém se identificou?

Page 13: Removendo o cheiro ruim do seu código - SoLiSC 2011

Mandamentos do código limpoMandamentos do código limpo

● Nunca terás ciúmes do código que você criar● Não possuirás misericórdia para com código de

seus colegas● Matarás TODO e QUALQUER princípio de

código sujo

Page 14: Removendo o cheiro ruim do seu código - SoLiSC 2011

Verdadeiro programadorde código limpo

Page 15: Removendo o cheiro ruim do seu código - SoLiSC 2011

Porque apenas funcionarnão é suficiente!

Page 16: Removendo o cheiro ruim do seu código - SoLiSC 2011

Blz, como posso melhorar?

Page 17: Removendo o cheiro ruim do seu código - SoLiSC 2011

Escolha nomes decentes!

Page 18: Removendo o cheiro ruim do seu código - SoLiSC 2011

NomenclaturaNomenclatura

● Use nomes que possuem algum sentido● Evite abreviações● Evite passar informações incorretas● Use nomes pronunciáveis● Cuidado ao misturar idiomas● Não dê dois (ou mais) sentidos para a mesma

palavra

Page 19: Removendo o cheiro ruim do seu código - SoLiSC 2011

Nomenclatura – ClassesNomenclatura – Classes

● Nomes das classes devem ser substantivos, NUNCA verbos

● A classe deve receber o nome do elemento que ela representa na vida real

Page 20: Removendo o cheiro ruim do seu código - SoLiSC 2011

Nomenclatura – MétodosNomenclatura – Métodos

● Nomes dos devem SEMPRE conter verbos● Caso programar em português, os verbos

devem ser utilizados no modo imperativo (calculaJuros(), cancelaCompra(), ...)

Page 21: Removendo o cheiro ruim do seu código - SoLiSC 2011

Nomenclatura – InterfacesNomenclatura – Interfaces

● Interfaces adicionam comportamentos aos objetos, portanto normalmente são nomeadas como adjetivos (Clickable, Draggable, Resizeable, …) ou substantivos (Iterator, SplObserver, SplSubject)

● Não há absolutamente NENHUMA necessidade de colocar o prefixo “I” em uma interface

Page 22: Removendo o cheiro ruim do seu código - SoLiSC 2011

Criando métodos e funções

Page 23: Removendo o cheiro ruim do seu código - SoLiSC 2011

Métodos e funçõesMétodos e funções

● Devem ser PEQUENOS (no máximo 20 linhas)● Devem fazer apenas UMA tarefa● Cuidado com a complexidade ciclomática dos

métodos e funções (quantidade de caminhos possíveis na execução)

● Caso existam muitos parâmetros, considere agrupar os parâmetros com o mesmo contexto em um objeto

● NÃO REPITA CÓDIGO!!

Page 24: Removendo o cheiro ruim do seu código - SoLiSC 2011

Lidando com comentários

Page 25: Removendo o cheiro ruim do seu código - SoLiSC 2011

ComentáriosComentários

● Comentários normalmente compensam um código mal feito

● Evite sempre o comentário que você pode substituir por uma variável ou método/função bem nomeada● if ($item->getStatus() == 3)

Page 26: Removendo o cheiro ruim do seu código - SoLiSC 2011

ComentáriosComentários

● Comentários normalmente compensam um código mal feito

● Evite sempre o comentário que você pode substituir por uma variável ou método/função bem nomeada● if ($item->getStatus() == 3) // verifica se está

cancelado

Page 27: Removendo o cheiro ruim do seu código - SoLiSC 2011

ComentáriosComentários

● Comentários normalmente compensam um código mal feito

● Evite sempre o comentário que você pode substituir por uma variável ou método/função bem nomeada● if ($item->getStatus() == 3) // verifica se está

cancelado● if ($item->estahCancelado())

Page 28: Removendo o cheiro ruim do seu código - SoLiSC 2011

ComentáriosComentários

● Comentários após fechar chaves são ruídos desnecessários

● Código comentado é inútil, portanto deve ser exterminado da face da terra

● Sempre que sentir necessidade de comentar pode ter certeza que algo de errado não está certo!

Page 29: Removendo o cheiro ruim do seu código - SoLiSC 2011

Utilize coding standards

Page 30: Removendo o cheiro ruim do seu código - SoLiSC 2011

Code StyleCode Style

● Unifica a forma que o código é escrito na empresa, assim TODOS entendem o código de forma prática e rápida

● Você deve escolher um padrão de formatação de código e combinar com a equipe TODA para adotar este padrão

Page 31: Removendo o cheiro ruim do seu código - SoLiSC 2011

Gerenciando erros

Page 32: Removendo o cheiro ruim do seu código - SoLiSC 2011

Tratamento de errosTratamento de erros

● Prefira exceptions do que retornar mensagens ou códigos de erros

● Crie as exceptions necessárias para o tratamento de erros das suas tarefas

● Evite tratar a classe base de exception● O tratamento de exceptions é uma tarefa,

portanto no método que tratá-las não deve haver nenhuma tarefa após o(s) catch(s)

Page 33: Removendo o cheiro ruim do seu código - SoLiSC 2011

Classes

Page 34: Removendo o cheiro ruim do seu código - SoLiSC 2011

Criando classesCriando classes

● Classes devem ser PEQUENAS● Mantenha os atributos encapsulados● Classes devem possuir apenas UMA

responsabilidade, ou seja deve estar inserida em somente um contexto

● Busque sempre a alta coesão, e consequentemente baixo acoplamento

● Utilize injeção de dependências● Crie testes automatizados!

Page 35: Removendo o cheiro ruim do seu código - SoLiSC 2011

Refatoração é OBRIGAÇÃO!

Page 36: Removendo o cheiro ruim do seu código - SoLiSC 2011

RefatoraçãoRefatoração

“Refatoração (do inglês Refactoring) é o processo de modificar um sistema de software para melhorar a estrutura interna do código sem alterar seu comportamento externo.(…)Outra consequência é a melhora no entendimento do código, o que facilita a manutenção e evita a inclusão de defeitos.”

http://pt.wikipedia.org/wiki/Refatora%C3%A7%C3%A3o

Page 37: Removendo o cheiro ruim do seu código - SoLiSC 2011

RefatoraçãoRefatoração

● Devem SEMPRE existir testes de unidade para podermos realizar uma refatoração correta (sem eles não temos como afirmar que o comportamento realmente não foi alterado).

Page 38: Removendo o cheiro ruim do seu código - SoLiSC 2011

Técnicas de refatoraçãoTécnicas de refatoração

● Extração de método● Extração de classe● Extração de variável local● Renomear classe/método/atributo● Encapsular atributo● Subir nível na hierarquia (para classe pai)● Descer nível na hierarquia (para classe filha)● Mover método/atributo (para outra classe)

Page 39: Removendo o cheiro ruim do seu código - SoLiSC 2011

Detonando TUDO!

Page 40: Removendo o cheiro ruim do seu código - SoLiSC 2011

<?phpnamespace Lcobucci\Utils\Math;

use \Lcobucci\Utils\Log\FileLogger;

class Calculator{ private $logger;

public function __construct() { $this->logger = new FileLogger(); }

public function div($x, $y) { $this->logger->log( 'div', array($x, $y), $y == 0 ? false : $x / $y );

return $y == 0 ? false : $x / $y; }}

Page 41: Removendo o cheiro ruim do seu código - SoLiSC 2011

<?phpnamespace Lcobucci\Utils\Math;

use \Lcobucci\Utils\Log\FileLogger;

class Calculator{ private $logger;

public function __construct(FileLogger $logger) { $this->logger = $logger; }

public function div($x, $y) { $this->logger->log( 'div', array($x, $y), $y == 0 ? false : $x / $y );

return $y == 0 ? false : $x / $y; }}

Page 42: Removendo o cheiro ruim do seu código - SoLiSC 2011

<?phpnamespace Lcobucci\Utils\Math;

use \Lcobucci\Utils\Log\FileLogger;

class Calculator{ private $logger;

public function __construct(FileLogger $logger) { $this->logger = $logger; }

public function divide($dividend, $divisor) { $this->logger->log( 'div', array($dividend, $divisor), $divisor == 0 ? false : $dividend / $divisor );

return $divisor == 0 ? false : $dividend / $divisor; }}

Page 43: Removendo o cheiro ruim do seu código - SoLiSC 2011

<?phpnamespace Lcobucci\Utils\Math;

use \Lcobucci\Utils\Log\FileLogger;

class Calculator{ private $logger;

public function __construct(FileLogger $logger) { $this->logger = $logger; }

public function divide($dividend, $divisor) { if ($divisor == 0) { throw new \InvalidArgumentException('Divisor can`t be ZERO');

}

$this->logger->log( 'div', array($dividend, $divisor), $dividend / $divisor );

return $dividend / $divisor; }}

Page 44: Removendo o cheiro ruim do seu código - SoLiSC 2011

<?phpnamespace Lcobucci\Utils\Math;

use \Lcobucci\Utils\Log\FileLogger;

class Calculator{ private $logger;

public function __construct(FileLogger $logger) { $this->logger = $logger; }

public function divide($dividend, $divisor) { if ($divisor == 0) { throw new \InvalidArgumentException('Divisor can`t be ZERO');

}

$result = $dividend / $divisor; $this->logger->log('div', array($dividend, $divisor), $result);

return $result; }}

Page 45: Removendo o cheiro ruim do seu código - SoLiSC 2011

Dúvidas???Dúvidas???

Page 46: Removendo o cheiro ruim do seu código - SoLiSC 2011

Obrigado!Obrigado!

Eu por aí: http://about.me/lcobucci

Slides: http://slideshare.net/lcobucci

Avalie essa palestra: http://joind.in/3948