criando aplicações php com zend e dojo · não para que seu código fique apenas ‘bonito’,...

12
Novatec Flávio Gomes da Silva Lisboa Dojo Zend e Criando Aplicações PHP com

Upload: trinhthu

Post on 10-Nov-2018

221 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Criando Aplicações PHP com Zend e Dojo · Não para que seu código fique apenas ‘bonito’, mas para que você se torne mais produtivo e o trabalho de manutenção de seu software

Novatec

Flávio Gomes da Silva Lisboa

DojoZend eCriando Aplicações PHP com

Page 2: Criando Aplicações PHP com Zend e Dojo · Não para que seu código fique apenas ‘bonito’, mas para que você se torne mais produtivo e o trabalho de manutenção de seu software

Copyright 2013 da Novatec Editora Ltda.

Todos os direitos reservados e protegidos pela Lei 9.610 de 19/02/1998.É proibida a reprodução desta obra, mesmo parcial, por qualquer processo,sem prévia autorização, por escrito, do autor e da Editora.

Editor: Rubens PratesRevisão gramatical: Giacomo Leone NetoCapa: Victor BittowEditoração eletrônica: Carolina Kuwabata

ISBN: 978-85-7522-306-2

Histórico de impressões:

Novembro/2012 Segunda ediçãoMaio/2010 Primeira edição (ISBN: 978-85-7522-235-5)

Novatec Editora Ltda.Rua Luís Antônio dos Santos 11002460-000 – São Paulo, SP – BrasilTel.: +55 11 2959-6529Fax: +55 11 2950-8869E-mail: [email protected]: www.novatec.com.brTwitter: twitter.com/novateceditoraFacebook: facebook.com/novatecLinkedIn: linkedin.com/in/novatec

MP20121123

Dados Internacionais de Catalogação na Publicação (CIP)(Câmara Brasileira do Livro, SP, Brasil)

Lisboa, Flávio Gomes da Silva Criando aplicações PHP com Zend e Dojo / Flávio Gomes da Silva Lisboa. -- 2. ed. rev. e ampl. -- São Paulo : Novatec Editora, 2013.

ISBN 978-85-7522-306-2

1. Aplicativos - Software - Desenvolvimento 2. Framework (Programa de computador) 3. HTML (Document markup language) 4. PHP (Linguagem de programação para computadores) 5. Web sites - Desenvolvimento 6. Zend Framework (Programa de computador) I. Título.

10-05021 CDD-005.12

Índices para catálogo sistemático:

1. Frameworks para desenvolvimento em PHP : Ciências da computação 005.12

Page 3: Criando Aplicações PHP com Zend e Dojo · Não para que seu código fique apenas ‘bonito’, mas para que você se torne mais produtivo e o trabalho de manutenção de seu software

17

capítulo 1Introdução

A perplexidade é o início do conhecimento.

– Kahlil Gibran

PHP não é uma linguagem para qualquer um. Ela é para mentes que se abrem para grandes possibilidades. PHP não foi feita para quem não gosta de pensar. Embora um principiante consiga fazer rapidamente alguma coisa funcional com PHP, é preciso um profissional qualificado para extrair dessa ferramenta todo o seu potencial.

Não basta dar um sabre de luz para alguém e imaginar que ela vai se tornar um jedi. Assim também não basta entregar um interpretador PHP nas mãos de um sobrinho e imaginar que ele vai construir uma aplicação corporativa de alta qualidade. Ele pode até fazer alguma coisa que funcione, mas ela vai ser como a armadura que Tony Stark, o Homem de Ferro, criou quando era prisioneiro dos Cinco Anéis no Afeganistão: após o primeiro voo, vai se espatifar no chão.

Você não assistiu ao filme Homem de Ferro, com Robert Downey Junior? Bem, isso é mau. Em primeiro lugar porque não vai compreender a analo-gia. Em segundo, porque perdeu uma grande oportunidade de aprender duas lições, uma sobre produção em condições de trabalho ruins e outra sobre aperfeiçoamento de projeto, que são coisas que interessam a qualquer atividade produtiva, incluindo a engenharia de software. E isso inclusive independe da linguagem de programação utilizada.

Abra a sua mente. Este livro não se chama ‘Criando Aplicações PHP de qualquer jeito’. Você deve terminar de lê-lo aprendendo a programar de

Page 4: Criando Aplicações PHP com Zend e Dojo · Não para que seu código fique apenas ‘bonito’, mas para que você se torne mais produtivo e o trabalho de manutenção de seu software

Criando Aplicações PHP com Zend e Dojo18

uma forma melhor. Não para que seu código fique apenas ‘bonito’, mas para que você se torne mais produtivo e o trabalho de manutenção de seu software não se torne um fardo. Você gasta tempo mantendo software mal escrito. E tempo é dinheiro.

Vamos fazer a seguir uma pequena viagem partindo do PHP e alcançando o Zend Framework. Para que isso? Para que fique mais claro por que é necessário usar um framework e por que deve ser o Zend Framework.

1.1 PHPPHP é uma linguagem de programação de tipagem fraca e dinâmica, compilada em tempo de execução e utilizada geralmente para construir aplicações web. Foi criada em 1994 pelo dinamarquês Rasmus Lerdorf, que estava insatisfeito com as tecnologias disponíveis na época para aplicações web (ou melhor, com a falta delas). Rasmus abriu o código-fonte do inter-pretador que havia criado em 1995 e a partir daí uma solução feita para um problema pessoal se transformou em um dos mais utilizados softwares livres do planeta.

Hoje PHP é utilizado por grandes empresas, como Facebook e Yahoo!, e por grandes projetos de software, como Drupal, Joomla, Moodle e Zabbix. Segundo pesquisa do site BuiltWith Trends1, de 29/11/2011, feito com um milhão de sites, PHP está presente em mais de um terço dos servidores web.

PHP é uma linguagem multiparadigma e bastante concisa. De acordo com Gutmans et alli (2005, p. 9), “PHP toma um pouco de sua sintaxe empresta de outras linguagens como C, shell, Perl e até mesmo Java. É realmente uma linguagem híbrida tomando as melhores características de outras linguagens e criando uma linguagem de script fácil de usar e poderosa”.

Sebesta (2000, p. 33), afirma que “o custo final de uma linguagem de pro-gramação é uma função de muitas de suas características”. Ele cita sete fatores que influem no custo de utilizar uma determinada linguagem: custo do treinamento dos programadores, custo da capacidade de escrita, custo de compilação, custo de execução dos programas, custo do sistema de implementação e custo da má confiabilidade.

1 http://trends.builtwith.com/framework

Page 5: Criando Aplicações PHP com Zend e Dojo · Não para que seu código fique apenas ‘bonito’, mas para que você se torne mais produtivo e o trabalho de manutenção de seu software

19Capítulo 1 ■ Introdução

Com relação a isso, PHP tem um custo mínimo para desenvolvimento. Em uma de suas apresentações, Rasmus Lerdorf (2011), o criador do PHP, declara que o PHP é uma tecnologia vencedora simplesmente por três motivos: ele escala, é fácil de aprender e de gerenciar. PHP serve, segundo ele, para fazer desde um simples formulário web no fim de semana até sites que atendem a grandes audiências, como Facebook e Yahoo!.

Uma forte característica de PHP é que ela abraça a arquitetura da web, em vez de lutar contra ela. PHP também é flexível o bastante para servir a diversos propósitos, sendo uma tecnologia cujo uso permeia tanto as áreas de desenvolvimento quanto de infraestrutura de sistemas, pois pode não somente ser usada para construção de aplicações como também para automação de tarefas.

1.2 Arquitetura de softwareEste livro trata de construção de software. A construção de software, se-gundo McConnell (2005, p. 44) “é uma parte extensa do desenvolvimento de software” que, dependendo do tamanho do projeto, “toma de 30% a 80% do tempo total”. McConnell (2005, p. 45) ainda acrescenta que “a construção é a atividade central no desenvolvimento de software” e que “o produto da construção – o código-fonte – é a única descrição precisa do software”. A situação, segundo ele é mais crítica, pois das atividades que fazem parte do desenvolvimento de software, a construção é a única que será, com certeza, realizada.

Quando se percebeu que o software poderia ser oferecido ao mercado para satisfazer desejos e necessidades, ele tornou-se, na acepção econômica do termo, um produto. Ao tornar-se um bem de consumo, embora sendo intangível, o software passou a ser tratado como um bem material. E bens materiais podem ser criados, aperfeiçoados ou implementados por meio de engenharia. Surgiu então a engenharia de software.

A engenharia de software aplica tecnologias e práticas de gerência de projetos para especificar, desenvolver e manter sistemas de software. A engenharia de software foca o processo, como o software é feito. Ele lida com o problema de como pessoas conseguirão criar um software utilizando recursos e tempo limitados.

Page 6: Criando Aplicações PHP com Zend e Dojo · Não para que seu código fique apenas ‘bonito’, mas para que você se torne mais produtivo e o trabalho de manutenção de seu software

Criando Aplicações PHP com Zend e Dojo20

Dentro desse processo, a estrutura assume uma grande importância. E segundo Coplien (2011, p. 2), “a arquitetura é a essência da estrutura”.

De acordo com McConnell (2005, p. 77), “a arquitetura é a etapa de alto nível de software, é a estrutura que irá acomodar as partes mais detalhadas do design”. Fowler (2006, p. 24), por sua vez, afirma que “a arquitetura é subjetiva, uma compreensão do projeto de um sistema compartilhada pelos desenvol-vedores experientes em um projeto”. Fowler explica que “esta compreensão compartilhada frequentemente se apresenta na forma dos componentes mais importantes do sistema e de como eles interagem”. Aqui temos dois elementos relacionados ao assunto deste livro: experiência e componentes.

Zend Framework tem uma biblioteca de componentes reutilizáveis, que encapsula a experiência de grandes desenvolvedores PHP. Zend Framework ajuda você a projetar uma boa arquitetura para sua aplicação PHP. Segundo McConnell (2005, p. 77), “uma boa arquitetura facilita a construção. Já uma arquitetura pobre torna a construção praticamente impossível”.

1.3 Orientação a objetosUm provérbio árabe diz o seguinte: “Tudo o que acontece uma vez pode nunca mais acontecer, mas tudo o que acontece duas vezes, acontecerá cer-tamente uma terceira”. Mas com software ocorre algo diferente. Basta um pedaço de código vir ao conhecimento de outra pessoa além daquela que o implementou originalmente para que ele seja replicado. E a replicação em software é muito fácil, o que faz com que blocos de código-fonte se trans-formem em verdadeiras pragas, que se proliferam de forma desordenada, e, assim como suas correspondentes biológicas, podem causar grandes danos.

O reaproveitamento de uma implementação de software não é algo ruim. O problema reside na forma em que ele é feito. Os paradigmas de programação evoluíram de modo a tratar, entre outras coisas, do reaproveitamento, do reúso de componentes de software. Na definição da Wikipédia para para-digma procedural, por exemplo, encontramos o benefício da “habilidade de reutilizar o mesmo código em diferentes lugares no programa sem copiá-lo”.

A reusabilidade, segundo McConnell (2005, p. 498), é uma característica interna da qualidade do software que indica “até que ponto e com que

Page 7: Criando Aplicações PHP com Zend e Dojo · Não para que seu código fique apenas ‘bonito’, mas para que você se torne mais produtivo e o trabalho de manutenção de seu software

21Capítulo 1 ■ Introdução

facilidade você pode usar partes de um sistema em outros sistemas”. Aqui encontramos um ponto de ligação com a questão da arquitetura. Um pro-blema recorrente possivelmente deve ter sido tratado por alguém. Nem sempre é preciso implementar a solução, mas procurar reutilizar uma so-lução. Se essa solução for compartilhada, fica muito mais fácil reaproveitar a experiência dos que se defrontaram com o problema pela primeira vez, ou dos que o resolveram eficazmente pela primeira vez.

Ao falar de arquitetura, falamos sobre estrutura. E a estrutura é a forma pela qual alguma coisa está organizada. E segundo Coplien (2011, p. 4), “a orientação a objetos é um modo de falar sobre a forma”. Mais especificamen-te, um modo de falar sobre o reúso de partes de software por meio de um mecanismo chamado herança. Além do reúso, Sweat (2005, p. 17) afirma que a orientação a objetos traz como benefícios a robustez, o encapsulamento, o polimorfismo e a extensibilidade.

A robustez, para o software, é a capacidade de manter o desempenho es-perado mesmo com variações de ambiente. Essa característica está ligada à escalabilidade, que, de acordo com Fowler (2006, p. 30), “é uma medida de como o acréscimo de recursos (…) afeta o desempenho”.

O encapsulamento deixa o software mais flexível, fácil de modificar e de criar novas implementações. O produto ideal de um encapsulamento é o componente de software, um bloco complexo de código-fonte que contém um conjunto completo de funcionalidades, que podem ser utilizadas por várias aplicações diferentes sem que seja necessário saber como o compo-nente as implementa.

O polimorfismo permite que vários tipos de dados (classes, para ser mais exato) sejam tratados de forma homogênea. Você consegue generalizar ope-rações e tratar conjuntos em vez de unidades isoladas de implementação. O código fica mais conciso, mais claro e mais fácil de ser mantido.

A extensibilidade refere-se à facilidade de agregar novas funcionalidades. Isso é muito importante, pois McConnell (2007, p. 73) diz que “requisitos estáveis são o Santo Graal do desenvolvimento de software”. A regra é que os requisitos irão mudar, antes, durante e depois da construção do software. E como as funcionalidades advêm dos requisitos, é melhor tornar fácil a alteração e inclusão de funcionalidades.

Page 8: Criando Aplicações PHP com Zend e Dojo · Não para que seu código fique apenas ‘bonito’, mas para que você se torne mais produtivo e o trabalho de manutenção de seu software

Criando Aplicações PHP com Zend e Dojo22

1.4 Padrões de projetoNa PHP Conference Brasil 2011, o palestrante Hélio Costa e Silva proferiu uma palestra (doh!) intitulada “Definir classe não é programar com orien-tação a objetos”. É um título interessante, porque toca em uma questão séria com relação à programação orientada a objetos: não é fácil utilizar seus recursos da forma mais adequada. Você pode com muita facilidade criar um sistema cheio de classes que funcionam apenas como meros agrupamentos de funções, sem uma clara divisão de interesses e responsabilidades.

Acredito que você não queira ser um mero implementador de casos de uso, que apenas codifica diagramas de classe, sequência e atividade, sem pensar na melhor forma de resolver os problemas. Você deve querer ser mais que um codificador de programas, deve almejar ser um arquiteto de software, alguém que pensa na estrutura de forma a conciliar na solução as necessi-dades do cliente com os desejos dos programadores.

Dispondo tão somente do conhecimento da teoria da orientação a obje-tos, você está como o menino Aang, o Avatar do filme O Último Mestre do

Ar (baseado, por sua vez, em uma série animada). Aang tem o potencial de dominar os quatro elementos (ar, água, terra e fogo). Só que a dominação plena de cada um deles leva quase uma vida inteira, e ele tem poucos meses para aprender todas. Da mesma forma, você precisa construir aplicações com os benefícios que a orientação a objetos diz proporcionar, mas não tem como viver a experiência de projetos anteriores em poucos dias. Mas se você não tem tempo para ganhar experiência na prática, pode assimilar a experiência daqueles que já a tiveram. Você pode basear suas decisões em soluções reutilizáveis, que já foram experimentadas várias vezes: os padrões de projeto.

De acordo com Sweat (2005, p. 18), o termo “padrão de projeto” nasceu no campo da arquitetura. Não a arquitetura de software e sim a mais tradicionalmente conhecida, aquela que cuida de edificações. O arquiteto Christopher Alexander publicou em 1977 um livro intitulado A Pattern Language: Towns/Building/Construction (Uma Linguagem de Padrões: Cidades/Prédio/Construção). Nessa obra ele descreve questões comuns de projeto arquitetural e explica como novos projetos podem ser criados pela agregação de padrões bem conhecidos. As ideias de Alexander, concebidas para edificações e cidades, foram traduzidas para o desenvolvimento de

Page 9: Criando Aplicações PHP com Zend e Dojo · Não para que seu código fique apenas ‘bonito’, mas para que você se torne mais produtivo e o trabalho de manutenção de seu software

23Capítulo 1 ■ Introdução

software, porque se encaixavam perfeitamente na construção de soluções a partir de componentes previamente existentes.

Fowler (2006, p. 31), afirma que “um elemento-chave dos padrões é que eles estão enraizados na prática”. De acordo com ele, “você descobre padrões vendo o que as pessoas fazem, observando as coisas que funcionam e então buscando a ‘essência da solução’”. Estamos falando novamente em expe-riência. Ou melhor, em utilizar o conhecimento obtido com experiências anteriores.

Gutmans et alli (2005, p. 59), afirma que os padrões de projeto são proble-mas que já foram abordados pela comunidade desenvolvedora de software e receberam soluções aceitas geralmente. Segundo eles, “a vantagem de conhecer e usar esses padrões é não somente economizar tempo, em vez de reinventar a roda, mas também dar aos desenvolvedores uma linguagem comum para design de software”. Ou seja, os padrões de projeto também servem para melhorar a comunicação entre os desenvolvedores, pois re-sumem em um nome curto várias informações que levariam tempo para serem transmitidas: qual o problema, qual o núcleo da solução, quando usá-lo e quais as vantagens e desvantagens.

Ocorre, porém, que os padrões de projeto são apenas descrições da essência de uma solução. Elas nada têm a ver com implementação em uma deter-minada linguagem de programação. Sendo assim, você tem de codificar os padrões. Além disso, cada padrão resolve um problema bem definido e localizado, e um sistema de informação pode ter muitos problemas não claramente definidos e bastante complexos. Isso exige a combinação de vários padrões de projeto para constituir uma solução mais complexa.

É aí que entram os frameworks. Gamma (in Venners, 2011) afirma que “pro-jetar software orientado a objetos é difícil” e “projetar software orientado a objetos reusável é mais difícil ainda”. Gamma diz que os frameworks, que nada mais são que combinações de padrões de projeto, estão no mais alto nível de reúso. Mas ele alerta que isso não é motivo para você começar a projetar o seu framework do zero, pois, segundo ele, “construir um fra-mework é um alto risco e um investimento significativo”. Então evite fazer um framework, se você puder reaproveitar um existente. É aqui que entra o Zend Framework.

Page 10: Criando Aplicações PHP com Zend e Dojo · Não para que seu código fique apenas ‘bonito’, mas para que você se torne mais produtivo e o trabalho de manutenção de seu software

Criando Aplicações PHP com Zend e Dojo24

1.5 Zend FrameworkZend Framework é um software livre e aberto, uma biblioteca de componen-tes PHP para desenvolvimento de aplicações de forma rápida e simplificada.

De acordo com Allen (2009, p. 5), Zend Framework (ZF) “é um framework bem abrangente e de baixo acoplamento, que contém tudo o que é neces-sário para o desenvolvimento de sua aplicação”. Vamos mostrar esse ‘tudo’ adiante, dividindo os componentes do framework em oito categorias.

1.5.1 Modelo-Visão-Controlador (MVC)

Os componentes a seguir fazem uso do padrão de projeto MVC, um pa-drão de arquitetura que serve perfeitamente para aplicações web (que se originou com a frustração de Trygve Reenskaug com as linguagens Simula e Smalltalk), o qual permite que desenvolvedores e web designers separem suas preocupações e práticas, fazendo com que a implementação de código e o projeto fiquem facilmente e claramente separados. Não há mais confusão ou necessidade de ambas as práticas se configurarem na mesma pessoa.

• Zend_Application, Zend_Application_Bootstrap, Zend_Application_Module, Zend_Application_Resource

• Zend_Controller_Front, Zend_Controller_Action, Zend_Controller_Dispatcher, Zend_Controller_Plugin, Zend_Controller_Router

• Zend_Form

• Zend_Layout, Zend_View, Zend_View_Filter, Zend_View_Helper

1.5.2 Desenvolvimento Rápido de Aplicações (RAD)

Uma das mais tediosas tarefas em qualquer projeto é a configuração inicial da aplicação. Zend_Tool fornece uma ferramenta de suporte e um cliente de linha de comando que permite a você gerar sua estrutura de projeto, arte-fatos MVC e mais. Comece a escrever sua aplicação imediatamente, em vez de manipular sua árvore de diretório.

• Zend_CodeGenerator

• Zend_Reflection

• Zend_Tool_Framework, Zend_Tool_Project

Page 11: Criando Aplicações PHP com Zend e Dojo · Não para que seu código fique apenas ‘bonito’, mas para que você se torne mais produtivo e o trabalho de manutenção de seu software

25Capítulo 1 ■ Introdução

1.5.3 Banco de dados

O ZF faz uso das melhores práticas de programação de banco de dados, por meio de padrões arquiteturais de fontes de dados. Ele fornece adaptadores de dados para a maioria dos sistemas gerenciadores de bancos de dados, os quais abstraem todos os detalhes de conexão de modo que você possa construir os modelos de sua aplicação (o domínio de seu negócio) sem se importar com o mecanismo de banco de dados.

• Zend_Db, Zend_Db_Adapter, Zend_Db_Profiler, Zend_Db_Select, Zend_Db_Table

1.5.4 Internacionalização (i18n) e Localização (l10n)

Em uma economia cada vez mais global, localizar sua aplicação para uma cultura e linguagem particulares é imperativo. Fazer isso facilmente, sempre que você esteja pronto para expandir seus mercados, é algo proporcionado com o suporte do Zend Framework para internacionalização.

• Zend_Currency

• Zend_Date

• Zend_Locale

• Zend_Measure

• Zend_Translate

1.5.5 Autenticação, autorização e gerenciamento de sessão

Virtualmente todas as aplicações web têm algum dado específico do usuá-rio que deve ser customizado, e geralmente protegido do acesso de outros usuários. Os componentes a seguir tornam esse controle rápido e fácil para o desenvolvedor.

• Zend_Acl

• Zend_Auth

• Zend_Session

1.5.6 Web e Web Services

Web services são uma parte integral do Zend Framework, e a intenção é que o ZF seja o vínculo para um ecossistema inteiro de Web Services

Page 12: Criando Aplicações PHP com Zend e Dojo · Não para que seu código fique apenas ‘bonito’, mas para que você se torne mais produtivo e o trabalho de manutenção de seu software

Criando Aplicações PHP com Zend e Dojo26

e fornecedores de APIs. A Zend Technologies tem firmado parcerias com Google, Microsoft e StrikeIron, e estes têm criado suporte para seus serviços dentro do Zend Framework.

• Consumo de serviços: Zend_Feed, Zend_Gdata, Zend_Http_Client, Zend_Rest_Client, Zend_Service, Zend_XmlRpc_Client

• Exposição de serviços: Zend_Amf_Server, Zend_Json_Server, Zend_Server_Definition, Zend_Server_Reflection, Zend_Rest_Server, Zend_Soap_Server, Zend_XmlRpc_Server

1.5.7 E-mail, formatos e busca

Aplicações Web 2.0 requerem suporte para Ajax, geração de arquivos PDF, comunicação por e-mail e busca, tudo isso sendo uma parte cada vez mais importante das aplicações web atualmente. O Zend Framework simplifica a vida do desenvolvedor e dá a ele um suporte interno para características essenciais, se não críticas de sua aplicação.

• Zend_Json

• Zend_Mail, Zend_Mime

• Zend_Pdf

• Zend_Search_Lucene

1.5.8 Núcleo de infraestrutura

Zend Framework é uma ampla biblioteca de componentes fracamente aco-plados, porém altamente coesos, que suportam muitas das outras caracte-rísticas que você pode precisar em uma aplicação web. Desde logging para rastreamento e depuração de sua aplicação em produção, cacheamento para alta performance, filtragem para aplicações mais seguras, até todas as outras peças que tornam a vida do desenvolvedor mais fácil. Zend Framework fornece tudo isso, mais uma vasta comunidade, o suporte e patrocínio de uma grande empresa e um enorme número de desenvolvedores talentosos que sabem como construir aplicações Zend Framework desde o zero.

• Zend_Cache, Zend_Config, Zend_Console_Getopt, Zend_Debug, Zend_Filter, Zend_Loader, Zend_Loader_Autoloader, Zend_Log, Zend_Memory, Zend_Registry, Zend_Validate, Zend_Version