Post on 01-Sep-2014
description
duodraco - 2009duodraco - 2009
A Arte do Desenvolvimento PHPA Arte do Desenvolvimento PHPPHP Conference '09PHP Conference '09
duodraco - 2009duodraco - 2009
Anderson “Duodraco” CasimiroAnderson “Duodraco” Casimiro
● Zend Certified EngineerZend Certified Engineer● Coordenador do PHPSPCoordenador do PHPSP● Desenvolvedor Web desde 2002Desenvolvedor Web desde 2002
● Atuando em diversas áreasAtuando em diversas áreas
● Team Leader na IntelectasTeam Leader na Intelectas
duodraco - 2009duodraco - 2009
ObjetivosObjetivos● Ferramentas built-inFerramentas built-in● Fontes ExternasFontes Externas
● PEAR / PECL, Frameworks, Recursos externosPEAR / PECL, Frameworks, Recursos externos
● Aplicação Aplicação ● ConclusãoConclusão
Agenda
duodraco - 2009duodraco - 2009
Objetivos
duodraco - 2009duodraco - 2009
Somos Artesãos
duodraco - 2009duodraco - 2009
precisamos de ferramentas
duodraco - 2009duodraco - 2009
O que temos à mão?
duodraco - 2009duodraco - 2009
PHPPHP
● Por si só já é uma toolboxPor si só já é uma toolbox● Nativamente suporta a maioria dos SGDBsNativamente suporta a maioria dos SGDBs
● Via correta compilação/instalaçãoVia correta compilação/instalação
● SQLiteSQLite● Suporte a Orientação a ObjetosSuporte a Orientação a Objetos
● Design PatternsDesign Patterns
● StreamsStreams● Controle sobre o HTTPControle sobre o HTTP● XML, JSON, WSDL …XML, JSON, WSDL …● PHARPHAR
duodraco - 2009duodraco - 2009
Namespaces
duodraco - 2009duodraco - 2009
● PHP5.3+PHP5.3+
● OrganizaçãoOrganização
● PacotesPacotes
● Evita conflitos de nomeEvita conflitos de nome
● namespacenamespace Framework Framework \\ DB; DB;
● useuse Framework Framework \\ DB; DB;
● InstanceInstance::::conn(conn($dsn$dsn,,$user$user,,$secret$secret););
● Framework Framework \\ DB DB \\ Instance Instance::::conn(...);conn(...);
NamespacesNamespaces
duodraco - 2009duodraco - 2009
SPL: Standard PHP Library
duodraco - 2009duodraco - 2009
SPLSPL
● Classes, Interfaces e funçõesClasses, Interfaces e funções● Funções para Autoload e outrasFunções para Autoload e outras● IteratorsIterators● Estruturas de DadosEstruturas de Dados● ObserverObserver● Array ObjectArray Object● ......
duodraco - 2009duodraco - 2009
PDO: PHP Data Objects
duodraco - 2009duodraco - 2009
PDOPDO
● Interface padrão para acesso a BDInterface padrão para acesso a BD● $pdo->query$pdo->query ao invés de ao invés de mysql_querymysql_query ou ou pg_querypg_query
● DriversDrivers● MSSql, MySQL, PostgreSQL, Firebird, Oracle, etcMSSql, MySQL, PostgreSQL, Firebird, Oracle, etc● PDO 4D (experimental)PDO 4D (experimental)● ODBCODBC
● Utiliza-se da SPLUtiliza-se da SPL● Iterators reduzem a carga Iterators reduzem a carga
● ProcessamentoProcessamento● Transporte de dadosTransporte de dados
duodraco - 2009duodraco - 2009
Datetime
duodraco - 2009duodraco - 2009
DatetimeDatetime
● PHP 5.2+PHP 5.2+● Conjunto de classes para manipulação de Conjunto de classes para manipulação de
tempo.tempo.● TimezoneTimezone● Interval / PeriodInterval / Period
duodraco - 2009duodraco - 2009
Command Line Interface
duodraco - 2009duodraco - 2009
Buscando recursos externos
duodraco - 2009duodraco - 2009
Google Code
duodraco - 2009duodraco - 2009
Source Forge
duodraco - 2009duodraco - 2009
PEAR e PECL
duodraco - 2009duodraco - 2009
PEAR e PECLPEAR e PECL
● PEAR – Classes e bibliotecas (PHP)PEAR – Classes e bibliotecas (PHP)● PECL – Extensões compiladasPECL – Extensões compiladas
● pear channel-discover pear.phpunit.depear channel-discover pear.phpunit.de
● pear install –all-deps phpunit/PHPUnit pear install –all-deps phpunit/PHPUnit
● pecl install xdebugpecl install xdebug
duodraco - 2009duodraco - 2009
Fazendo Arte
duodraco - 2009duodraco - 2009
Integração Contínua
duodraco - 2009duodraco - 2009
Integração ContínuaIntegração Contínua
● ““..., Condição de constituir um todo pela adição ..., Condição de constituir um todo pela adição ou combinação de partes ou elementos.” ou combinação de partes ou elementos.” (Michaelis)(Michaelis)
● Integração de uma mudançaIntegração de uma mudança● Sem que quebre seu projetoSem que quebre seu projeto● RegularmenteRegularmente
● Prática de engenharia de softwarePrática de engenharia de software● Metodologias ágeisMetodologias ágeis
● Produzir um sistema funcional quantas vezes Produzir um sistema funcional quantas vezes forem possíveisforem possíveis
duodraco - 2009duodraco - 2009
Integração ContínuaIntegração Contínua
● CruiseControl + PHP Under ControlCruiseControl + PHP Under Control● Hudson + PhingHudson + Phing● XINC – Xinc Is Not Cruise ControlXINC – Xinc Is Not Cruise Control● SismoSismo
duodraco - 2009duodraco - 2009
Deployment com Phing
duodraco - 2009duodraco - 2009
PhingPhing
● Phing Is Not GnumakePhing Is Not Gnumake● Ferramenta de building, realiza tarefas que Ferramenta de building, realiza tarefas que
auxiliam a aplicaçãoauxiliam a aplicação● ConfigurarConfigurar● EmpacotarEmpacotar● Transferir entre servidoresTransferir entre servidores● TestarTestar
– Testes unitários, padrões de código, documentaçãoTestes unitários, padrões de código, documentação● etcetc
duodraco - 2009duodraco - 2009
Testes Unitários
duodraco - 2009duodraco - 2009
Testes UnitáriosTestes Unitários
● Testes de Entrada e Saída para cada Testes de Entrada e Saída para cada unidade do projetounidade do projeto
● PHPUnitPHPUnit● LimeLime● SimpleTestSimpleTest
duodraco - 2009duodraco - 2009
Padrão de Codificação
duodraco - 2009duodraco - 2009
Padrão de CodificaçãoPadrão de Codificação
● OrganizaçãoOrganização● Consistência, todos programam do mesmo Consistência, todos programam do mesmo
jeitojeito● Zend, PEAR, PHPCS, Squiz e MySourceZend, PEAR, PHPCS, Squiz e MySource
● PHP_CodesnifferPHP_Codesniffer● CodeBeautifier / PHP_BeautifierCodeBeautifier / PHP_Beautifier
duodraco - 2009duodraco - 2009
Documentação
duodraco - 2009duodraco - 2009
DocumentaçãoDocumentação
● PHPDocumentorPHPDocumentor● DoxygenDoxygen
● PHP2UML / UML2PHPPHP2UML / UML2PHP● Dia2PHPDia2PHP● PHP2XMIPHP2XMI
duodraco - 2009duodraco - 2009
Replicação
duodraco - 2009duodraco - 2009
ReplicaçãoReplicação
● Duplicação:Duplicação:● TextualmenteTextualmente● MarcaçãoMarcação● FuncionalidadeFuncionalidade
● Replicação != ReutilizaçãoReplicação != Reutilização● Código replicado “evolui” em separadoCódigo replicado “evolui” em separado
● PHPCPD – Copy & Paste DetectorPHPCPD – Copy & Paste Detector● Varre os arquivos PHP em busca de trechos duplicados Varre os arquivos PHP em busca de trechos duplicados
duodraco - 2009duodraco - 2009
Métricas de Software
duodraco - 2009duodraco - 2009
Métricas de SoftwareMétricas de Software
● PHP_DependPHP_Depend● Identifica porções de código candidatas a Identifica porções de código candidatas a
refatoração.refatoração.● CCN: Cyclomatic ComplexityCCN: Cyclomatic Complexity● LoC - > Linhas de CódigoLoC - > Linhas de Código
– TotaisTotais– Comentadas (CLoC) ou não (NCLoC)Comentadas (CLoC) ou não (NCLoC)– Executáveis (EloC)Executáveis (EloC)
● etc..etc..
duodraco - 2009duodraco - 2009
Acabando com os Bugs!
duodraco - 2009duodraco - 2009
Acabando com os Bugs! Acabando com os Bugs!
● NÃO “DEBUGUE” COM ECHO!!!NÃO “DEBUGUE” COM ECHO!!!● Utilize ferramentas que:Utilize ferramentas que:
● Param a execuçãoParam a execução● Permitem o avanço passo-a-passo da execuçãoPermitem o avanço passo-a-passo da execução● Mostram todas as variáveis ativas em qualquer Mostram todas as variáveis ativas em qualquer
pontoponto● Avaliam performanceAvaliam performance● Possibilitem que você faça tudo isso da sua IDEPossibilitem que você faça tudo isso da sua IDE
duodraco - 2009duodraco - 2009
E o nosso Rodasol é ...E o nosso Rodasol é ...
duodraco - 2009duodraco - 2009
XDebugXDebug
● PECL, Binários, código fontePECL, Binários, código fonte● DebuggingDebugging● TracingTracing● ProfillingProfilling
● CachegrindCachegrind
● Integração com as principais IDEsIntegração com as principais IDEs
duodraco - 2009duodraco - 2009
Além do RodasolAlém do Rodasol
● WebgrindWebgrind● PHP_DebugPHP_Debug● DbugDbug● FirePHPFirePHP● *DBG**DBG*
duodraco - 2009duodraco - 2009
Frameworks
duodraco - 2009duodraco - 2009
FrameworksFrameworks
● Vai te poupar tempo Vai te poupar tempo ● e evitar cabelos brancos precocese evitar cabelos brancos precoces
● O básico já está prontoO básico já está pronto● EstruturaEstrutura● Conexão com o BDConexão com o BD● SegurançaSegurança● Comuncação (API / Email / WS / etc)Comuncação (API / Email / WS / etc)
● Na maioria adotam o MVCNa maioria adotam o MVC
duodraco - 2009duodraco - 2009
FrameworksFrameworks
● Zend FrameworkZend Framework● SymfonySymfony● CakePHPCakePHP● CodeIgniterCodeIgniter● KohanaKohana● SeagullSeagull● YiiYii
● PradoPrado● EzComponentsEzComponents● FuseBoxFuseBox● QCodoQCodo
duodraco - 2009duodraco - 2009
Banco de Dados
duodraco - 2009duodraco - 2009
Camada de AbstraçãoCamada de Abstração
● Permite-nos usar o BD, sem usá-lo Permite-nos usar o BD, sem usá-lo diretamente, seja qual for.diretamente, seja qual for.
● MDB2MDB2● ADODBADODB● DbFacileDbFacile● PDOPDO
duodraco - 2009duodraco - 2009
ORMORM
● Mapeamento Objeto-RelacionalMapeamento Objeto-Relacional● Objetos como entidadesObjetos como entidades
● CreoleCreole● PropelPropel● DoctrineDoctrine● Outlet , RedBean Outlet , RedBean
duodraco - 2009duodraco - 2009
Gerenciando
duodraco - 2009duodraco - 2009
GerenciandoGerenciando
● ProjetosProjetos● TarefasTarefas● BugsBugs● EquipeEquipe● WorkflowWorkflow● VersõesVersões● IntegraçãoIntegração
duodraco - 2009duodraco - 2009
Gerenciando ProjetosGerenciando Projetos
● PHProjektPHProjekt● PHP-CollabPHP-Collab● AchievoAchievo● ArbitArbit● MantisMantis
duodraco - 2009duodraco - 2009
Objetivo e Criatividade
duodraco - 2009duodraco - 2009
Perguntas???
duodraco - 2009duodraco - 2009
Obrigado!!!
duodraco - 2009duodraco - 2009
http://joind.in/1203http://joind.in/1203
● duodraco@phpsp.org.brduodraco@phpsp.org.br● anderson@duodraco.comanderson@duodraco.com● facebook.com/duodracofacebook.com/duodraco● twitter.com/duodracotwitter.com/duodraco● duodraco.comduodraco.com● phpsp.org.brphpsp.org.br