Combatendo o código procedural
         Trilha PHP
         Rodrigo dos Santos
          rodrigodossantos.ws
               @rosantoz



                                Globalcode – Open4education
Sobre mim

Desenvolvedor PHP desde 2004

Zend Certified Engineer PHP 5.3

Pós Graduado em Engenharia de Projetos de Software

Sócio-Proprietário da empresa Ilha Web (www.ilhaweb.net)




                                       Globalcode – Open4education
Sobre mim

Blog pessoal: www.rodrigodossantos.ws

Twitter: @rosantoz

E-mail: rodrigo@ilhaweb.net




                                        Globalcode – Open4education
Nosso Contexto

          Globalcode – Open4education
Programação procedural

 ➔
     Também conhecida como Programação Imperativa;

 ➔
     Facilita o aprendizado de uma linguagem de programação;

 ➔
     Foco em “Como fazer” e não o “quê fazer”;

 ➔
  Proporciona liberdade ao programador, mas pode se tornar
 um grande problema;




                                                 Globalcode – Open4education
Programação procedural
 ➔
     Cada página do sistema é feito como um bloco.

 ➔
     Não existe a separação de objetivos e responsabilidades.

 ➔
   Alto grau de acoplamento entre interface, lógica de negócio
 e persistência de dados.

 ➔
     Não segue um padrão específico;

 ➔
  Código difícil de ler;

 ➔
  Dificulta o processo de evolução e manutenção;



                                               Globalcode – Open4education
Exemplo




          Globalcode – Open4education
O que fazer então?

      Separar as responsabilidades




                            Globalcode – Open4education
O que fazer então?

                   Separar as responsabilidades




Figura: http://www.netrostar.com
                                         Globalcode – Open4education
Antes de começar ...

 Nosso ambiente de desenvolvimento:




                          Globalcode – Open4education
Antes de começar ...

 Nosso ambiente de desenvolvimento:
     error_reporting(E_ALL | E_STRICT);
     error_reporting(-1);




                                          Globalcode – Open4education
Antes de começar ...

 Nosso ambiente de desenvolvimento:
     error_reporting(E_ALL | E_STRICT);
     error_reporting(-1);

     Xdebug;




                                          Globalcode – Open4education
Antes de começar ...

 Nosso ambiente de desenvolvimento:
     error_reporting(E_ALL | E_STRICT);
     error_reporting(-1);

     Xdebug;

     @ é proibido (Ex. @include “config.php”)




                                                Globalcode – Open4education
Adote um padrão de código


 Zend;

 Pear;

 Squiz;

 Crie seu próprio padrão, mas tenha um padrão;


                                   Globalcode – Open4education
Adote um padrão de código
PHP_CodeSniffer




                            Globalcode – Open4education
Adote um padrão de código
PHPMD




                            Globalcode – Open4education
Separando as coisas




                      Globalcode – Open4education
Separando as coisas




                      Globalcode – Open4education
Template Engine
 Possibilita separar o código HTML do código PHP




     (Zend_View, Zend_Layout)
                                  Globalcode – Open4education
Template Engine




                  Globalcode – Open4education
Separando as coisas




                      Globalcode – Open4education
Separando as coisas




                      Globalcode – Open4education
Hora de Modelar




Foto: www.mulherbeleza.com.br   Globalcode – Open4education
Por que modelar?




                   Globalcode – Open4education
Por que modelar?
 Ajuda a entender o problema;




                                Globalcode – Open4education
Por que modelar?
 Ajuda a entender o problema;

 Nos faz pensar antes de fazer;




                                  Globalcode – Open4education
Por que modelar?
 Ajuda a entender o problema;

 Nos faz pensar antes de fazer;

 Facilita a comunicação com o usuário;




                                   Globalcode – Open4education
Por que modelar?
 Ajuda a entender o problema;

 Nos faz pensar antes de fazer;

 Facilita a comunicação com o usuário;

 Serve de documentação do sistema;




                                   Globalcode – Open4education
Como fazer?
 Comece pelo mais importante (comece pelo pior);




                                   Globalcode – Open4education
Como fazer?
 Comece pelo mais importante (comece pelo pior);

 UML;




                                   Globalcode – Open4education
Como fazer?
 Comece pelo mais importante (comece pelo pior);

 UML;

 Ferramentas case (Ex. Entreprise Architect);




                                    Globalcode – Open4education
Como fazer?
 Comece pelo mais importante (comece pelo pior);

 UML;

 Ferramentas case (Ex. Entreprise Architect);

 Papel e caneta também servem.




                                    Globalcode – Open4education
Ex.: Diagrama de classes




                           Globalcode – Open4education
Fazer código, finalmente!




                            Globalcode – Open4education
Fazer código, finalmente!
 TDD (Test Driven Development)




                                 Globalcode – Open4education
Fazer código, finalmente!
 TDD (Test Driven Development)
   Escreva um teste;




                                 Globalcode – Open4education
Fazer código, finalmente!
 TDD (Test Driven Development)
   Escreva um teste;
   Faça-o funcionar;




                                 Globalcode – Open4education
Fazer código, finalmente!
 TDD (Test Driven Development)
   Escreva um teste;
   Faça-o funcionar;
   Refatore.




                                 Globalcode – Open4education
Fazer código, finalmente!
 TDD (Test Driven Development)
   Escreva um teste;
   Faça-o funcionar;
   Refatore.

 Resultado: código limpo e que funciona




                                   Globalcode – Open4education
Fazer código, finalmente!
 TDD (Test Driven Development)
   Escreva um teste;
   Faça-o funcionar;
   Refatore.

 Resultado: código limpo e que funciona

 Para PHP: PHPUnit



                                   Globalcode – Open4education
Separando as coisas




                      Globalcode – Open4education
Separando as coisas




                      Globalcode – Open4education
Ciclo contínuo

          Globalcode – Open4education
Ciclo contínuo
 A cada novo release:




                        Globalcode – Open4education
Ciclo contínuo
 A cada novo release:

   Adicionamos novas funcionalidades;




                                        Globalcode – Open4education
Ciclo contínuo
 A cada novo release:

   Adicionamos novas funcionalidades;

   Refatoramos uma parte do código legado;




                                        Globalcode – Open4education
Ciclo contínuo
 A cada novo release:

   Adicionamos novas funcionalidades;

   Refatoramos uma parte do código legado;

   Mantemos a documentação.




                                        Globalcode – Open4education
Perguntas?

       Globalcode – Open4education

Combatendo o Código Procedural - TDC 2012 Florianópolis - Trilha PHP

  • 1.
    Combatendo o códigoprocedural Trilha PHP Rodrigo dos Santos rodrigodossantos.ws @rosantoz Globalcode – Open4education
  • 2.
    Sobre mim Desenvolvedor PHPdesde 2004 Zend Certified Engineer PHP 5.3 Pós Graduado em Engenharia de Projetos de Software Sócio-Proprietário da empresa Ilha Web (www.ilhaweb.net) Globalcode – Open4education
  • 3.
    Sobre mim Blog pessoal:www.rodrigodossantos.ws Twitter: @rosantoz E-mail: rodrigo@ilhaweb.net Globalcode – Open4education
  • 4.
    Nosso Contexto Globalcode – Open4education
  • 5.
    Programação procedural ➔ Também conhecida como Programação Imperativa; ➔ Facilita o aprendizado de uma linguagem de programação; ➔ Foco em “Como fazer” e não o “quê fazer”; ➔ Proporciona liberdade ao programador, mas pode se tornar um grande problema; Globalcode – Open4education
  • 6.
    Programação procedural ➔ Cada página do sistema é feito como um bloco. ➔ Não existe a separação de objetivos e responsabilidades. ➔ Alto grau de acoplamento entre interface, lógica de negócio e persistência de dados. ➔ Não segue um padrão específico; ➔ Código difícil de ler; ➔ Dificulta o processo de evolução e manutenção; Globalcode – Open4education
  • 7.
    Exemplo Globalcode – Open4education
  • 8.
    O que fazerentão? Separar as responsabilidades Globalcode – Open4education
  • 9.
    O que fazerentão? Separar as responsabilidades Figura: http://www.netrostar.com Globalcode – Open4education
  • 10.
    Antes de começar... Nosso ambiente de desenvolvimento: Globalcode – Open4education
  • 11.
    Antes de começar... Nosso ambiente de desenvolvimento: error_reporting(E_ALL | E_STRICT); error_reporting(-1); Globalcode – Open4education
  • 12.
    Antes de começar... Nosso ambiente de desenvolvimento: error_reporting(E_ALL | E_STRICT); error_reporting(-1); Xdebug; Globalcode – Open4education
  • 13.
    Antes de começar... Nosso ambiente de desenvolvimento: error_reporting(E_ALL | E_STRICT); error_reporting(-1); Xdebug; @ é proibido (Ex. @include “config.php”) Globalcode – Open4education
  • 14.
    Adote um padrãode código Zend; Pear; Squiz; Crie seu próprio padrão, mas tenha um padrão; Globalcode – Open4education
  • 15.
    Adote um padrãode código PHP_CodeSniffer Globalcode – Open4education
  • 16.
    Adote um padrãode código PHPMD Globalcode – Open4education
  • 17.
    Separando as coisas Globalcode – Open4education
  • 18.
    Separando as coisas Globalcode – Open4education
  • 19.
    Template Engine Possibilitaseparar o código HTML do código PHP (Zend_View, Zend_Layout) Globalcode – Open4education
  • 20.
    Template Engine Globalcode – Open4education
  • 21.
    Separando as coisas Globalcode – Open4education
  • 22.
    Separando as coisas Globalcode – Open4education
  • 23.
    Hora de Modelar Foto:www.mulherbeleza.com.br Globalcode – Open4education
  • 24.
    Por que modelar? Globalcode – Open4education
  • 25.
    Por que modelar? Ajuda a entender o problema; Globalcode – Open4education
  • 26.
    Por que modelar? Ajuda a entender o problema; Nos faz pensar antes de fazer; Globalcode – Open4education
  • 27.
    Por que modelar? Ajuda a entender o problema; Nos faz pensar antes de fazer; Facilita a comunicação com o usuário; Globalcode – Open4education
  • 28.
    Por que modelar? Ajuda a entender o problema; Nos faz pensar antes de fazer; Facilita a comunicação com o usuário; Serve de documentação do sistema; Globalcode – Open4education
  • 29.
    Como fazer? Comecepelo mais importante (comece pelo pior); Globalcode – Open4education
  • 30.
    Como fazer? Comecepelo mais importante (comece pelo pior); UML; Globalcode – Open4education
  • 31.
    Como fazer? Comecepelo mais importante (comece pelo pior); UML; Ferramentas case (Ex. Entreprise Architect); Globalcode – Open4education
  • 32.
    Como fazer? Comecepelo mais importante (comece pelo pior); UML; Ferramentas case (Ex. Entreprise Architect); Papel e caneta também servem. Globalcode – Open4education
  • 33.
    Ex.: Diagrama declasses Globalcode – Open4education
  • 34.
    Fazer código, finalmente! Globalcode – Open4education
  • 35.
    Fazer código, finalmente! TDD (Test Driven Development) Globalcode – Open4education
  • 36.
    Fazer código, finalmente! TDD (Test Driven Development) Escreva um teste; Globalcode – Open4education
  • 37.
    Fazer código, finalmente! TDD (Test Driven Development) Escreva um teste; Faça-o funcionar; Globalcode – Open4education
  • 38.
    Fazer código, finalmente! TDD (Test Driven Development) Escreva um teste; Faça-o funcionar; Refatore. Globalcode – Open4education
  • 39.
    Fazer código, finalmente! TDD (Test Driven Development) Escreva um teste; Faça-o funcionar; Refatore. Resultado: código limpo e que funciona Globalcode – Open4education
  • 40.
    Fazer código, finalmente! TDD (Test Driven Development) Escreva um teste; Faça-o funcionar; Refatore. Resultado: código limpo e que funciona Para PHP: PHPUnit Globalcode – Open4education
  • 41.
    Separando as coisas Globalcode – Open4education
  • 42.
    Separando as coisas Globalcode – Open4education
  • 43.
    Ciclo contínuo Globalcode – Open4education
  • 44.
    Ciclo contínuo Acada novo release: Globalcode – Open4education
  • 45.
    Ciclo contínuo Acada novo release: Adicionamos novas funcionalidades; Globalcode – Open4education
  • 46.
    Ciclo contínuo Acada novo release: Adicionamos novas funcionalidades; Refatoramos uma parte do código legado; Globalcode – Open4education
  • 47.
    Ciclo contínuo Acada novo release: Adicionamos novas funcionalidades; Refatoramos uma parte do código legado; Mantemos a documentação. Globalcode – Open4education
  • 48.
    Perguntas? Globalcode – Open4education