SlideShare ist ein Scribd-Unternehmen logo
1 von 46
Downloaden Sie, um offline zu lesen
Removendo o cheiro ruim
      do seu código
     Luís Otávio Cobucci Oblonczyk



22 de Outubro de 2011
       6° SoLiSC
Luí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
Prepare-se
Você verá agora uma imagem
forte, porém real...




                             Ela representa o seu
                             código, sim você viu
                             direito, é o SEU código
                             aqui!
Sim, essa é a real visão do seu código,
e só você não percebeu isso ainda
Sim, essa é a real visão do seu código,
e só você não percebeu isso ainda




                                          E não adianta querer
                                          colocar uma telinha
                                          bonitinha, porque lá
                                          no fundo você sabe
                                          como ele realmente é
Mas fique tranquilo, você tem
salvação (e seu código também)
Mas fique tranquilo, você tem
salvação (e seu código também)




                                 Se você não está convencido,
                                 vou argumentar um pouco
Vida 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
Vida 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.
Alguém se identificou?
Mandamentos 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
Verdadeiro programador
de código limpo
Porque apenas funcionar
não é suficiente!
Blz, como posso melhorar?
Escolha nomes decentes!
Nomenclatura
●
    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
Nomenclatura – Classes
●
    Nomes das classes devem ser substantivos,
    NUNCA verbos
●
    A classe deve receber o nome do elemento que
    ela representa na vida real
Nomenclatura – Métodos
●
    Nomes dos devem SEMPRE conter verbos
●
    Caso programar em português, os verbos
    devem ser utilizados no modo imperativo
    (calculaJuros(), cancelaCompra(), ...)
Nomenclatura – 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
Criando métodos e funções
Mé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!!
Lidando com comentários
Comentá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)
Comentá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
Comentá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())
Comentá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!
Utilize coding standards
Code 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
Gerenciando erros
Tratamento 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)
Classes
Criando 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!
Refatoração é OBRIGAÇÃO!
Refatoraçã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
Refatoraçã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).
Té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)
Detonando TUDO!
<?php
namespace LcobucciUtilsMath;

use LcobucciUtilsLogFileLogger;

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;
    }
}
<?php
namespace LcobucciUtilsMath;
use LcobucciUtilsLogFileLogger;
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;
    }
}
<?php
namespace LcobucciUtilsMath;

use LcobucciUtilsLogFileLogger;

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;
    }
}
<?php
namespace LcobucciUtilsMath;

use LcobucciUtilsLogFileLogger;

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;
    }
}
<?php
namespace LcobucciUtilsMath;

use LcobucciUtilsLogFileLogger;
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;
    }
}
Dúvidas???
Obrigado!

Eu por aí: http://about.me/lcobucci
Slides: http://slideshare.net/lcobucci


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

Weitere ähnliche Inhalte

Was ist angesagt?

10 Boas Práticas de Programação
10 Boas Práticas de Programação10 Boas Práticas de Programação
10 Boas Práticas de Programação
Carlos Schults
 
Curso Básico de Java - Aula 2
Curso Básico de Java - Aula 2Curso Básico de Java - Aula 2
Curso Básico de Java - Aula 2
PeslPinguim
 
Aprender Javascript e jQuery (UFCD
Aprender Javascript e jQuery (UFCDAprender Javascript e jQuery (UFCD
Aprender Javascript e jQuery (UFCD
Afonso Gomes
 

Was ist angesagt? (19)

10 Boas Práticas de Programação
10 Boas Práticas de Programação10 Boas Práticas de Programação
10 Boas Práticas de Programação
 
02 - Orientação a objetos e revisão de C# v1.5
02 - Orientação a objetos e revisão de C# v1.502 - Orientação a objetos e revisão de C# v1.5
02 - Orientação a objetos e revisão de C# v1.5
 
Curso Básico de Java - Aula 2
Curso Básico de Java - Aula 2Curso Básico de Java - Aula 2
Curso Básico de Java - Aula 2
 
Programação Orientada a Objetos - 001
Programação Orientada a Objetos - 001Programação Orientada a Objetos - 001
Programação Orientada a Objetos - 001
 
04 - C# laços de repetição, vetores e matrizes v1.0
04 - C# laços de repetição, vetores e matrizes v1.004 - C# laços de repetição, vetores e matrizes v1.0
04 - C# laços de repetição, vetores e matrizes v1.0
 
Clean Code
Clean CodeClean Code
Clean Code
 
Java e orientação a objetos
Java e orientação a objetosJava e orientação a objetos
Java e orientação a objetos
 
Java Primeiros Passos - Cap 7
Java Primeiros Passos - Cap 7Java Primeiros Passos - Cap 7
Java Primeiros Passos - Cap 7
 
Clean code
Clean codeClean code
Clean code
 
POO - Aula 003
POO - Aula 003POO - Aula 003
POO - Aula 003
 
Aprender Javascript e jQuery (UFCD
Aprender Javascript e jQuery (UFCDAprender Javascript e jQuery (UFCD
Aprender Javascript e jQuery (UFCD
 
JavaScript: agora é sério
JavaScript: agora é sérioJavaScript: agora é sério
JavaScript: agora é sério
 
(Re)pensando a OOP - Flisol Gyn
(Re)pensando a OOP - Flisol Gyn(Re)pensando a OOP - Flisol Gyn
(Re)pensando a OOP - Flisol Gyn
 
Apostila de Introdução a POO com C#
Apostila de Introdução a POO com C#Apostila de Introdução a POO com C#
Apostila de Introdução a POO com C#
 
tmn - Introdução ao JavaScript
tmn - Introdução ao JavaScripttmn - Introdução ao JavaScript
tmn - Introdução ao JavaScript
 
Aula 1 5
Aula 1 5Aula 1 5
Aula 1 5
 
03 - Orientação a objetos e classes em C# v1.0
03 - Orientação a objetos e classes em C# v1.003 - Orientação a objetos e classes em C# v1.0
03 - Orientação a objetos e classes em C# v1.0
 
Java13
Java13Java13
Java13
 
Java - Aula 2 - Orientado a Objetos
Java - Aula 2 - Orientado a ObjetosJava - Aula 2 - Orientado a Objetos
Java - Aula 2 - Orientado a Objetos
 

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

Ähnlich wie Removendo o cheiro ruim do seu código - SoLiSC 2011 (20)

Refatoração - aquela caprichada no código
Refatoração - aquela caprichada no códigoRefatoração - aquela caprichada no código
Refatoração - aquela caprichada no código
 
Boas práticas no desenvolvimento de software
Boas práticas no desenvolvimento de softwareBoas práticas no desenvolvimento de software
Boas práticas no desenvolvimento de software
 
Dependency injection WTF? - PHPSC Conference 2012
Dependency injection WTF? - PHPSC Conference 2012Dependency injection WTF? - PHPSC Conference 2012
Dependency injection WTF? - PHPSC Conference 2012
 
Desenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmDesenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine Orm
 
Construindo ERP's com PHP: Desafios em design, manutenção segurança e perf...
Construindo ERP's com PHP: Desafios em design, manutenção segurança e perf...Construindo ERP's com PHP: Desafios em design, manutenção segurança e perf...
Construindo ERP's com PHP: Desafios em design, manutenção segurança e perf...
 
Solid
SolidSolid
Solid
 
Clean code
Clean codeClean code
Clean code
 
01-Paradigmas.pdf
01-Paradigmas.pdf01-Paradigmas.pdf
01-Paradigmas.pdf
 
Código Limpo
Código LimpoCódigo Limpo
Código Limpo
 
Refatoração
RefatoraçãoRefatoração
Refatoração
 
Introdução a linguagem Python
Introdução a linguagem PythonIntrodução a linguagem Python
Introdução a linguagem Python
 
Programando em Go
Programando em GoProgramando em Go
Programando em Go
 
Design Patterns com PHP
Design Patterns com PHPDesign Patterns com PHP
Design Patterns com PHP
 
Paradigmas de Programação - Imperativo, Orientado a Objetos e Funcional
Paradigmas de Programação - Imperativo, Orientado a Objetos e FuncionalParadigmas de Programação - Imperativo, Orientado a Objetos e Funcional
Paradigmas de Programação - Imperativo, Orientado a Objetos e Funcional
 
Clean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everisClean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everis
 
ZeroBugsProject - Técnicas de programação efetivas
ZeroBugsProject - Técnicas de programação efetivasZeroBugsProject - Técnicas de programação efetivas
ZeroBugsProject - Técnicas de programação efetivas
 
Testes de software de A a Z
Testes de software de A a ZTestes de software de A a Z
Testes de software de A a Z
 
Cs 2
Cs 2Cs 2
Cs 2
 
Produtividade com Eclipse IDE
Produtividade com Eclipse IDEProdutividade com Eclipse IDE
Produtividade com Eclipse IDE
 
Clean Code - Fork In Tuba
Clean Code - Fork In TubaClean Code - Fork In Tuba
Clean Code - Fork In Tuba
 

Kürzlich hochgeladen

Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
Natalia Granato
 

Kürzlich hochgeladen (6)

ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 

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

  • 1. Removendo o cheiro ruim do seu código Luís Otávio Cobucci Oblonczyk 22 de Outubro de 2011 6° SoLiSC
  • 2. Luí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
  • 4. Você verá agora uma imagem forte, porém real... Ela representa o seu código, sim você viu direito, é o SEU código aqui!
  • 5.
  • 6. Sim, essa é a real visão do seu código, e só você não percebeu isso ainda
  • 7. Sim, essa é a real visão do seu código, e só você não percebeu isso ainda E não adianta querer colocar uma telinha bonitinha, porque lá no fundo você sabe como ele realmente é
  • 8. Mas fique tranquilo, você tem salvação (e seu código também)
  • 9. Mas fique tranquilo, você tem salvação (e seu código também) Se você não está convencido, vou argumentar um pouco
  • 10. Vida 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
  • 11. Vida 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.
  • 13. Mandamentos 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
  • 16. Blz, como posso melhorar?
  • 18. Nomenclatura ● 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
  • 19. Nomenclatura – Classes ● Nomes das classes devem ser substantivos, NUNCA verbos ● A classe deve receber o nome do elemento que ela representa na vida real
  • 20. Nomenclatura – Métodos ● Nomes dos devem SEMPRE conter verbos ● Caso programar em português, os verbos devem ser utilizados no modo imperativo (calculaJuros(), cancelaCompra(), ...)
  • 21. Nomenclatura – 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
  • 22. Criando métodos e funções
  • 23. Mé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!!
  • 25. Comentá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)
  • 26. Comentá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
  • 27. Comentá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())
  • 28. Comentá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!
  • 30. Code 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
  • 32. Tratamento 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)
  • 34. Criando 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!
  • 36. Refatoraçã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
  • 37. Refatoraçã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).
  • 38. Té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)
  • 40. <?php namespace LcobucciUtilsMath; use LcobucciUtilsLogFileLogger; 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; } }
  • 41. <?php namespace LcobucciUtilsMath; use LcobucciUtilsLogFileLogger; 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; } }
  • 42. <?php namespace LcobucciUtilsMath; use LcobucciUtilsLogFileLogger; 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; } }
  • 43. <?php namespace LcobucciUtilsMath; use LcobucciUtilsLogFileLogger; 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; } }
  • 44. <?php namespace LcobucciUtilsMath; use LcobucciUtilsLogFileLogger; 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; } }
  • 46. Obrigado! Eu por aí: http://about.me/lcobucci Slides: http://slideshare.net/lcobucci Avalie essa palestra: http://joind.in/3948