SlideShare ist ein Scribd-Unternehmen logo
1 von 33
Downloaden Sie, um offline zu lesen
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

Weitere ähnliche Inhalte

Was ist angesagt?

Seja um júnior não seja um sobrinho
Seja um júnior não seja um sobrinhoSeja um júnior não seja um sobrinho
Seja um júnior não seja um sobrinhoAlexandre Andrade
 
Dessign patterns: Resoluções comuns para problemas comuns de POO
Dessign patterns: Resoluções comuns para problemas comuns de POODessign patterns: Resoluções comuns para problemas comuns de POO
Dessign patterns: Resoluções comuns para problemas comuns de POOJoão Lucas Farias
 
YAGNI, KISS e Over Patternization
YAGNI, KISS e Over PatternizationYAGNI, KISS e Over Patternization
YAGNI, KISS e Over PatternizationVinicius Quaiato
 
Mocks, Stubs e Fakes - Developers-SP - Julho-2017
Mocks, Stubs e Fakes - Developers-SP - Julho-2017Mocks, Stubs e Fakes - Developers-SP - Julho-2017
Mocks, Stubs e Fakes - Developers-SP - Julho-2017Renato Groff
 
TDD: Técnicas, Benefícios e Limitação
TDD: Técnicas, Benefícios e Limitação TDD: Técnicas, Benefícios e Limitação
TDD: Técnicas, Benefícios e Limitação Icaro Camelo
 
TDD para "meros mortais"
TDD para "meros mortais"TDD para "meros mortais"
TDD para "meros mortais"thiagobapt
 
Componentes Transformers: Combinando o melhor de cada framework
Componentes Transformers: Combinando o melhor de cada frameworkComponentes Transformers: Combinando o melhor de cada framework
Componentes Transformers: Combinando o melhor de cada frameworkFlávio Lisboa
 
Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014
Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014
Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014Gilmar PSL
 
Como escolher um framework web
Como escolher um framework webComo escolher um framework web
Como escolher um framework webRafael Carneiro
 
aGITe antes de versionar
aGITe antes de versionaraGITe antes de versionar
aGITe antes de versionars4nx
 
Aprensentacao oo-trincheiras
Aprensentacao oo-trincheirasAprensentacao oo-trincheiras
Aprensentacao oo-trincheirasHigor César
 
Brownfield applications: dicas, técnicas e experiências
Brownfield applications: dicas, técnicas e experiênciasBrownfield applications: dicas, técnicas e experiências
Brownfield applications: dicas, técnicas e experiênciasEmmanuel Gomes Brandão
 
Arquitetura em camadas em python e quanto isso pode ajudar
Arquitetura em camadas em python e quanto isso pode ajudarArquitetura em camadas em python e quanto isso pode ajudar
Arquitetura em camadas em python e quanto isso pode ajudarBetter Developer
 

Was ist angesagt? (20)

O programador pragmático
O programador pragmáticoO programador pragmático
O programador pragmático
 
O que é código bonito?
O que é código bonito?O que é código bonito?
O que é código bonito?
 
Seja um júnior não seja um sobrinho
Seja um júnior não seja um sobrinhoSeja um júnior não seja um sobrinho
Seja um júnior não seja um sobrinho
 
Design patterns
Design patternsDesign patterns
Design patterns
 
Dessign patterns: Resoluções comuns para problemas comuns de POO
Dessign patterns: Resoluções comuns para problemas comuns de POODessign patterns: Resoluções comuns para problemas comuns de POO
Dessign patterns: Resoluções comuns para problemas comuns de POO
 
YAGNI, KISS e Over Patternization
YAGNI, KISS e Over PatternizationYAGNI, KISS e Over Patternization
YAGNI, KISS e Over Patternization
 
Mocks, Stubs e Fakes - Developers-SP - Julho-2017
Mocks, Stubs e Fakes - Developers-SP - Julho-2017Mocks, Stubs e Fakes - Developers-SP - Julho-2017
Mocks, Stubs e Fakes - Developers-SP - Julho-2017
 
TDC 2015 - Torne-se um programador melhor
TDC 2015 - Torne-se um  programador melhorTDC 2015 - Torne-se um  programador melhor
TDC 2015 - Torne-se um programador melhor
 
Programação Orientada a Gambiarra
Programação Orientada a GambiarraProgramação Orientada a Gambiarra
Programação Orientada a Gambiarra
 
TDD: Técnicas, Benefícios e Limitação
TDD: Técnicas, Benefícios e Limitação TDD: Técnicas, Benefícios e Limitação
TDD: Técnicas, Benefícios e Limitação
 
O Spring está morto! Viva o Spring!
O Spring está morto! Viva o Spring!O Spring está morto! Viva o Spring!
O Spring está morto! Viva o Spring!
 
TDD para "meros mortais"
TDD para "meros mortais"TDD para "meros mortais"
TDD para "meros mortais"
 
Componentes Transformers: Combinando o melhor de cada framework
Componentes Transformers: Combinando o melhor de cada frameworkComponentes Transformers: Combinando o melhor de cada framework
Componentes Transformers: Combinando o melhor de cada framework
 
Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014
Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014
Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014
 
Como escolher um framework web
Como escolher um framework webComo escolher um framework web
Como escolher um framework web
 
Code smell gsw
Code smell   gswCode smell   gsw
Code smell gsw
 
aGITe antes de versionar
aGITe antes de versionaraGITe antes de versionar
aGITe antes de versionar
 
Aprensentacao oo-trincheiras
Aprensentacao oo-trincheirasAprensentacao oo-trincheiras
Aprensentacao oo-trincheiras
 
Brownfield applications: dicas, técnicas e experiências
Brownfield applications: dicas, técnicas e experiênciasBrownfield applications: dicas, técnicas e experiências
Brownfield applications: dicas, técnicas e experiências
 
Arquitetura em camadas em python e quanto isso pode ajudar
Arquitetura em camadas em python e quanto isso pode ajudarArquitetura em camadas em python e quanto isso pode ajudar
Arquitetura em camadas em python e quanto isso pode ajudar
 

Andere mochten auch

Vacu wrap anti cellulite VACUSTYLER WIEN, Kosmetiksalon in Wien: Beau Well Dr...
Vacu wrap anti cellulite VACUSTYLER WIEN, Kosmetiksalon in Wien: Beau Well Dr...Vacu wrap anti cellulite VACUSTYLER WIEN, Kosmetiksalon in Wien: Beau Well Dr...
Vacu wrap anti cellulite VACUSTYLER WIEN, Kosmetiksalon in Wien: Beau Well Dr...Adi Werschlein
 
Fiche physio 5
Fiche physio 5Fiche physio 5
Fiche physio 5casimir91
 
FOAD et pratiques d'individualisation
FOAD et pratiques d'individualisation FOAD et pratiques d'individualisation
FOAD et pratiques d'individualisation Redaction SKODEN
 
Vorteile eines ISP beim Anti-Botnet-Beratungszentrumn
Vorteile eines ISP beim Anti-Botnet-BeratungszentrumnVorteile eines ISP beim Anti-Botnet-Beratungszentrumn
Vorteile eines ISP beim Anti-Botnet-Beratungszentrumn1&1
 
Discours President Smel 2013
Discours President Smel 2013Discours President Smel 2013
Discours President Smel 2013smelinfo
 
Fiche stim intelect« advanced
Fiche stim intelect« advancedFiche stim intelect« advanced
Fiche stim intelect« advancedcasimir91
 
Business Review URBSFA 2012-2013
Business Review URBSFA 2012-2013Business Review URBSFA 2012-2013
Business Review URBSFA 2012-2013BelgianFootball
 
Endovascular newsletter ix
Endovascular newsletter ixEndovascular newsletter ix
Endovascular newsletter ixSalutaria
 
Sixième journal de l'Association Malezi de Hasseindjé Oichili
Sixième journal de l'Association Malezi de Hasseindjé OichiliSixième journal de l'Association Malezi de Hasseindjé Oichili
Sixième journal de l'Association Malezi de Hasseindjé OichiliMoinamkomori Mgazidja
 
Newsletter xii2014
Newsletter xii2014Newsletter xii2014
Newsletter xii2014Salutaria
 
Présentation GWT au JUG Montréal 14 avril 2011
Présentation GWT au JUG Montréal 14 avril 2011Présentation GWT au JUG Montréal 14 avril 2011
Présentation GWT au JUG Montréal 14 avril 2011Claude Coulombe
 
Barrage Anti Inondation
Barrage Anti InondationBarrage Anti Inondation
Barrage Anti InondationAnth
 
Manual Ventilador Bennet 560 manual clinico
Manual Ventilador Bennet 560 manual clinicoManual Ventilador Bennet 560 manual clinico
Manual Ventilador Bennet 560 manual clinicoAndrés Dante Podestá
 

Andere mochten auch (19)

Vacu wrap anti cellulite VACUSTYLER WIEN, Kosmetiksalon in Wien: Beau Well Dr...
Vacu wrap anti cellulite VACUSTYLER WIEN, Kosmetiksalon in Wien: Beau Well Dr...Vacu wrap anti cellulite VACUSTYLER WIEN, Kosmetiksalon in Wien: Beau Well Dr...
Vacu wrap anti cellulite VACUSTYLER WIEN, Kosmetiksalon in Wien: Beau Well Dr...
 
AntiVEGF : mecanismes
AntiVEGF : mecanismesAntiVEGF : mecanismes
AntiVEGF : mecanismes
 
Apresentacao 01 projeto_lhc
Apresentacao 01 projeto_lhcApresentacao 01 projeto_lhc
Apresentacao 01 projeto_lhc
 
Fiche physio 5
Fiche physio 5Fiche physio 5
Fiche physio 5
 
FOAD et pratiques d'individualisation
FOAD et pratiques d'individualisation FOAD et pratiques d'individualisation
FOAD et pratiques d'individualisation
 
Vorteile eines ISP beim Anti-Botnet-Beratungszentrumn
Vorteile eines ISP beim Anti-Botnet-BeratungszentrumnVorteile eines ISP beim Anti-Botnet-Beratungszentrumn
Vorteile eines ISP beim Anti-Botnet-Beratungszentrumn
 
Discours President Smel 2013
Discours President Smel 2013Discours President Smel 2013
Discours President Smel 2013
 
Anti-patterns
Anti-patternsAnti-patterns
Anti-patterns
 
Seminario 3
Seminario 3Seminario 3
Seminario 3
 
Fiche stim intelect« advanced
Fiche stim intelect« advancedFiche stim intelect« advanced
Fiche stim intelect« advanced
 
Andreita
AndreitaAndreita
Andreita
 
Business Review URBSFA 2012-2013
Business Review URBSFA 2012-2013Business Review URBSFA 2012-2013
Business Review URBSFA 2012-2013
 
Endovascular newsletter ix
Endovascular newsletter ixEndovascular newsletter ix
Endovascular newsletter ix
 
Sixième journal de l'Association Malezi de Hasseindjé Oichili
Sixième journal de l'Association Malezi de Hasseindjé OichiliSixième journal de l'Association Malezi de Hasseindjé Oichili
Sixième journal de l'Association Malezi de Hasseindjé Oichili
 
Newsletter xii2014
Newsletter xii2014Newsletter xii2014
Newsletter xii2014
 
Guide du-routard-de-l-intelligence-economique-2012
Guide du-routard-de-l-intelligence-economique-2012Guide du-routard-de-l-intelligence-economique-2012
Guide du-routard-de-l-intelligence-economique-2012
 
Présentation GWT au JUG Montréal 14 avril 2011
Présentation GWT au JUG Montréal 14 avril 2011Présentation GWT au JUG Montréal 14 avril 2011
Présentation GWT au JUG Montréal 14 avril 2011
 
Barrage Anti Inondation
Barrage Anti InondationBarrage Anti Inondation
Barrage Anti Inondation
 
Manual Ventilador Bennet 560 manual clinico
Manual Ventilador Bennet 560 manual clinicoManual Ventilador Bennet 560 manual clinico
Manual Ventilador Bennet 560 manual clinico
 

Ähnlich wie PHP Anti Patterns

Sistemas para o Mundo Real
Sistemas para o Mundo RealSistemas para o Mundo Real
Sistemas para o Mundo RealLeandro Silva
 
Projeto de API, por Gilmar P.S
Projeto de API, por Gilmar P.SProjeto de API, por Gilmar P.S
Projeto de API, por Gilmar P.SThoughtworks
 
A Carreira de Desenvolvedor: do Jr ao Sênior
A Carreira de Desenvolvedor: do Jr ao SêniorA Carreira de Desenvolvedor: do Jr ao Sênior
A Carreira de Desenvolvedor: do Jr ao SêniorMarcos Pereira
 
#DNAD15 - Diminuindo sofrimento com código legado de linguagens não mainstreams
#DNAD15  - Diminuindo sofrimento com código legado de linguagens não mainstreams#DNAD15  - Diminuindo sofrimento com código legado de linguagens não mainstreams
#DNAD15 - Diminuindo sofrimento com código legado de linguagens não mainstreamsJacqueline Abreu
 
Como criar seu próprio Framework
Como criar seu próprio FrameworkComo criar seu próprio Framework
Como criar seu próprio FrameworkHiarison Gigante
 
Boas praticas em_desenvolvimento_de_software
Boas praticas em_desenvolvimento_de_softwareBoas praticas em_desenvolvimento_de_software
Boas praticas em_desenvolvimento_de_softwareivanassisleal
 
Palestra na Faccat sobre o Zeanwork
Palestra na Faccat sobre o ZeanworkPalestra na Faccat sobre o Zeanwork
Palestra na Faccat sobre o ZeanworkJosemar Davi Luedke
 
PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011Evaldo Junior
 
Carreira de Desenvolvimento
Carreira de DesenvolvimentoCarreira de Desenvolvimento
Carreira de DesenvolvimentoAlvaro Viebrantz
 
Dicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHPDicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHPDouglas V. Pasqua
 
Deixando de ser moleque com PHP
Deixando de ser moleque com PHPDeixando de ser moleque com PHP
Deixando de ser moleque com PHPVinícius Krolow
 
Procura-se: DevOps #cpbr9
Procura-se: DevOps #cpbr9Procura-se: DevOps #cpbr9
Procura-se: DevOps #cpbr9Camilla Gomes
 
5 Pontos sobre desenvolvimento de software
5 Pontos sobre desenvolvimento de software5 Pontos sobre desenvolvimento de software
5 Pontos sobre desenvolvimento de softwareMiguel Alho
 

Ähnlich wie PHP Anti Patterns (20)

Sistemas para o Mundo Real
Sistemas para o Mundo RealSistemas para o Mundo Real
Sistemas para o Mundo Real
 
Projeto de API, por Gilmar P.S
Projeto de API, por Gilmar P.SProjeto de API, por Gilmar P.S
Projeto de API, por Gilmar P.S
 
Começando errado com php
Começando errado com phpComeçando errado com php
Começando errado com php
 
A Carreira de Desenvolvedor: do Jr ao Sênior
A Carreira de Desenvolvedor: do Jr ao SêniorA Carreira de Desenvolvedor: do Jr ao Sênior
A Carreira de Desenvolvedor: do Jr ao Sênior
 
Introdução ao XP
Introdução ao XPIntrodução ao XP
Introdução ao XP
 
#DNAD15 - Diminuindo sofrimento com código legado de linguagens não mainstreams
#DNAD15  - Diminuindo sofrimento com código legado de linguagens não mainstreams#DNAD15  - Diminuindo sofrimento com código legado de linguagens não mainstreams
#DNAD15 - Diminuindo sofrimento com código legado de linguagens não mainstreams
 
POG nunca mais - SOLISC
POG nunca mais - SOLISCPOG nunca mais - SOLISC
POG nunca mais - SOLISC
 
Como criar seu próprio Framework
Como criar seu próprio FrameworkComo criar seu próprio Framework
Como criar seu próprio Framework
 
Frameworks PHP
Frameworks PHPFrameworks PHP
Frameworks PHP
 
Boas praticas em_desenvolvimento_de_software
Boas praticas em_desenvolvimento_de_softwareBoas praticas em_desenvolvimento_de_software
Boas praticas em_desenvolvimento_de_software
 
Palestra na Faccat sobre o Zeanwork
Palestra na Faccat sobre o ZeanworkPalestra na Faccat sobre o Zeanwork
Palestra na Faccat sobre o Zeanwork
 
PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011
 
Carreira de Desenvolvimento
Carreira de DesenvolvimentoCarreira de Desenvolvimento
Carreira de Desenvolvimento
 
O que é ser um bom programador?
O que é ser um bom programador?O que é ser um bom programador?
O que é ser um bom programador?
 
Dicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHPDicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHP
 
Palestra Testes De Unidade Com JUnit
Palestra Testes De Unidade Com JUnitPalestra Testes De Unidade Com JUnit
Palestra Testes De Unidade Com JUnit
 
Cs 2
Cs 2Cs 2
Cs 2
 
Deixando de ser moleque com PHP
Deixando de ser moleque com PHPDeixando de ser moleque com PHP
Deixando de ser moleque com PHP
 
Procura-se: DevOps #cpbr9
Procura-se: DevOps #cpbr9Procura-se: DevOps #cpbr9
Procura-se: DevOps #cpbr9
 
5 Pontos sobre desenvolvimento de software
5 Pontos sobre desenvolvimento de software5 Pontos sobre desenvolvimento de software
5 Pontos sobre desenvolvimento de software
 

PHP Anti Patterns