Criando Aplicações PHP com Zend e Dojo - 2ª Edição

Page 1

Criando Aplicações PHP com

Zend e Dojo Flávio Gomes da Silva Lisboa

Novatec


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 Prates Revisão gramatical: Giacomo Leone Neto Capa: Victor Bittow Editoração eletrônica: Carolina Kuwabata ISBN: 978-85-7522-306-2 Histórico de impressões: Novembro/2012 Maio/2010

Segunda edição Primeira edição (ISBN: 978-85-7522-235-5)

Novatec Editora Ltda. Rua Luís Antônio dos Santos 110 02460-000 – São Paulo, SP – Brasil Tel.: +55 11 2959-6529 Fax: +55 11 2950-8869 E-mail: novatec@novatec.com.br Site: www.novatec.com.br Twitter: twitter.com/novateceditora Facebook: facebook.com/novatec LinkedIn: linkedin.com/in/novatec

Dados

Internacionais de Catalogação na Publicação (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

MP20121123

(CIP)


capítulo 1

Introduçã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 analogia. 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 17


18

Criando Aplicações PHP com Zend e Dojo

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 PHP PHP é 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 interpretador 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 programaçã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


Capítulo 1 ■ Introdução

19

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 software Este livro trata de construção de software. A construção de software, segundo 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.


20

Criando Aplicações PHP com Zend e Dojo

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 desenvolvedores 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 objetos Um provérbio árabe diz o seguinte: “Tudo o que acontece uma vez pode nunca mais acontecer, mas tudo o que acontece duas vezes, acontecerá certamente 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 transformem 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 paradigma 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


Capítulo 1 ■ Introdução

21

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 problema recorrente possivelmente deve ter sido tratado por alguém. Nem sempre é preciso implementar a solução, mas procurar reutilizar uma soluçã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 especificamente, 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 esperado 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 componente 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 operaçõ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.


22

Criando Aplicações PHP com Zend e Dojo

1.4 Padrões de projeto Na PHP Conference Brasil 2011, o palestrante Hélio Costa e Silva proferiu uma palestra (doh!) intitulada “Definir classe não é programar com orientaçã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 necessidades do cliente com os desejos dos programadores. Dispondo tão somente do conhecimento da teoria da orientação a objetos, 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


Capítulo 1 ■ Introdução

23

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 experiê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 problemas 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 resumem 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 determinada 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 “projetar 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 framework é 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.


24

Criando Aplicações PHP com Zend e Dojo

1.5 Zend Framework Zend Framework é um software livre e aberto, uma biblioteca de componentes 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 é necessá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 padrã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, artefatos 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


Capítulo 1 ■ Introdução

25

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


26

Criando Aplicações PHP com Zend e Dojo

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_Service, Zend_XmlRpc_Client • Exposição de serviços:

Zend_Http_Client, Zend_Rest_Client,

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 acoplados, porém altamente coesos, que suportam muitas das outras caracterí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


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.