PHP Anti-patterns
O que NÃO fazer com PHP
Sobre mim
• Theoziran Lima
  – Análise e Desenvolvimento de Sistemas
    (Faculdade iDEZ)
  – Analista de sistemas (Acade)
  – Desenvolvedor PHP (Shoprizer)
  – Colunista iMasters


... e eu não sou o carinha da capa...
O que são
  anti-
patterns?
Significa fora do padrão, ou
simplesmente ter maus hábitos, no
    nosso caso de codificação.
Porque devemos saber o que não
     fazer (anti-patterns)?
Geralmente iniciantes tendem a
 criar códigos utilizando “anti-
            patterns”
Porque vamos conhecer os
     problemas/erros que foram
enfrentados por desenvolvedores mais
 experientes, assim não cometeremos
          os mesmos erros.
Então qual padrão de projeto devo
              usar?
Não existe isso, temos os padrões para resolver
problemas específicos sendo tratados de forma
                    genérica.

• Padrões de criação
  – Factory
  – Singleton
• Padrões estruturais
  – Adapter
  – Bridge
  ... vamos voltar aos anti-patterns
... outro “problema” ...
PHP é fácil, também é mais fácil
            cometer erros

• Quanto mais fácil a linguagem, mais fácil fazer
  gambiarras;
• Por ser fácil, muitas pessoas desenvolvem
  sem ter nenhuma base (conceitos) de
  desenvolvimento de software;
• O desenvolvedor se sente tentado a resolver o
  problema de forma mais rápida.
PHP é fácil, também é mais fácil
            cometer erros

• Invasão de camadas, quando se está
  utilizando um MVC, ou pelo menos tentando.
“Nenhuma linguagem, framework,
impede do desenvolvedor fazer
gambiarra” Felipe Ribeiro, “PHP não é coisa de moleque”



     Esqueceram que somos os mestres das soluções?
Spaghetti é o
padrão mais
  utilizado
No anti-pattern spaghetti, o “V” de
MVC faz tudo.
É importante
 ter estilo ...
Estilos de codificação
• Seu código não deve ser percebido dentro do
  sistema;
• Sempre desenvolva com E_STRICT e E_NOTICE
  ativos;
• Filtre suas entradas e escape suas saídas;
• Quando possível utilize type-casts em suas
  funções ou métodos.
Use com cuidado
•   $_REQUEST
•   __get, __set, __isset, __unset
•   __call, __callStatic
•   __autoload
•   @
•   <?=
“Evite” fazer gambiarras ...
              gambiarras ...
... uma dia
   ela vai
explodir ...
Não conte com a sorte para seu
      sistema funcionar
Framework, você tá brincando?
DIY – Do it yourself
• Desperdício de tempo
  –   Desenvolvimento
  –   Testes
  –   Documentação
  –   Manutenção
• Criar bus desnecessários
Overdesign
• Limite-se a fazer o que o cliente deseja, ou ao
  que foi requisitado.
• Não fique refazendo o sistema do zero todas
  vez que cometer um erro.
Overdesign
• Quanto mais complexo for sua arquitetura:
  –   O código será mais complexo;
  –   Mais bugs você vai ter;
  –   Mais tempo de desenvolvimento irá custar;
  –   A probalidade o projeto falhar é alta.
PHP não é Java, C++, Python, Ruby on
                 Rails
<?php
class String{
        private $str;
        public function __construct($str){
                $this->str = $str;
        }
        public function __toString(){
                return $this->str;
        }
    }
... KISS,
ainda funciona ...
Pense em segurança em todas as
       fases do projeto

      Influenciará no design e no
           desenvolvimento
Dica

 Aproveitem pra estudar os patterns e os
anti-patterns que vai nos poupar tempo de
    passar experiências desagradáveis.
Alguma dúvida ?
Referências
• PHP Quebec Conference
  – http://conf.phpquebec.com/
• Wikipédia
  – Anti-patterns
  – Design Pattern
Sigam-me os bons...



@theoziran
www.theoziran.com.br

PHP Anti Patterns

  • 1.
    PHP Anti-patterns O queNÃO fazer com PHP
  • 2.
    Sobre mim • TheoziranLima – Análise e Desenvolvimento de Sistemas (Faculdade iDEZ) – Analista de sistemas (Acade) – Desenvolvedor PHP (Shoprizer) – Colunista iMasters ... e eu não sou o carinha da capa...
  • 3.
    O que são anti- patterns?
  • 4.
    Significa fora dopadrão, ou simplesmente ter maus hábitos, no nosso caso de codificação.
  • 5.
    Porque devemos sabero que não fazer (anti-patterns)?
  • 6.
    Geralmente iniciantes tendema criar códigos utilizando “anti- patterns”
  • 7.
    Porque vamos conheceros problemas/erros que foram enfrentados por desenvolvedores mais experientes, assim não cometeremos os mesmos erros.
  • 8.
    Então qual padrãode projeto devo usar?
  • 9.
    Não existe isso,temos os padrões para resolver problemas específicos sendo tratados de forma genérica. • Padrões de criação – Factory – Singleton • Padrões estruturais – Adapter – Bridge ... vamos voltar aos anti-patterns
  • 10.
  • 11.
    PHP é fácil,também é mais fácil cometer erros • Quanto mais fácil a linguagem, mais fácil fazer gambiarras; • Por ser fácil, muitas pessoas desenvolvem sem ter nenhuma base (conceitos) de desenvolvimento de software; • O desenvolvedor se sente tentado a resolver o problema de forma mais rápida.
  • 12.
    PHP é fácil,também é mais fácil cometer erros • Invasão de camadas, quando se está utilizando um MVC, ou pelo menos tentando.
  • 13.
    “Nenhuma linguagem, framework, impededo desenvolvedor fazer gambiarra” Felipe Ribeiro, “PHP não é coisa de moleque” Esqueceram que somos os mestres das soluções?
  • 14.
    Spaghetti é o padrãomais utilizado
  • 15.
    No anti-pattern spaghetti,o “V” de MVC faz tudo.
  • 16.
  • 17.
    Estilos de codificação •Seu código não deve ser percebido dentro do sistema; • Sempre desenvolva com E_STRICT e E_NOTICE ativos; • Filtre suas entradas e escape suas saídas; • Quando possível utilize type-casts em suas funções ou métodos.
  • 18.
    Use com cuidado • $_REQUEST • __get, __set, __isset, __unset • __call, __callStatic • __autoload • @ • <?=
  • 19.
    “Evite” fazer gambiarras... gambiarras ...
  • 20.
    ... uma dia ela vai explodir ...
  • 21.
    Não conte coma sorte para seu sistema funcionar
  • 22.
  • 23.
    DIY – Doit yourself • Desperdício de tempo – Desenvolvimento – Testes – Documentação – Manutenção • Criar bus desnecessários
  • 24.
    Overdesign • Limite-se afazer o que o cliente deseja, ou ao que foi requisitado. • Não fique refazendo o sistema do zero todas vez que cometer um erro.
  • 25.
    Overdesign • Quanto maiscomplexo for sua arquitetura: – O código será mais complexo; – Mais bugs você vai ter; – Mais tempo de desenvolvimento irá custar; – A probalidade o projeto falhar é alta.
  • 26.
    PHP não éJava, C++, Python, Ruby on Rails <?php class String{ private $str; public function __construct($str){ $this->str = $str; } public function __toString(){ return $this->str; } }
  • 27.
  • 29.
    Pense em segurançaem todas as fases do projeto Influenciará no design e no desenvolvimento
  • 30.
    Dica Aproveitem praestudar os patterns e os anti-patterns que vai nos poupar tempo de passar experiências desagradáveis.
  • 31.
  • 32.
    Referências • PHP QuebecConference – http://conf.phpquebec.com/ • Wikipédia – Anti-patterns – Design Pattern
  • 33.