Desenvolvimento de Grandes Aplicações Web Kyle Loudon Introdução de Nate Koechley Novatec Authorized Portuguese translation of the English edition of titled Developing Large Web Applications, First Edition, ISBN 978-0-596-80302-5 © 2010, Yahoo! Inc. This translation is published and sold by permission of O'Reilly Media, Inc., the owner of all rights to publish and sell the same. Tradução em português autorizada da edição em inglês do título Developing Large Web Applications, First Edition, ISBN 978-0-596-80302-5 © 2010, Yahoo! Inc. Esta tradução é publicada e vendida com a permissão da O'Reilly Media, Inc., detentora de todos os direitos para publicação e venda desta obra. © Novatec Editora Ltda. 2010. 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 Tradução: Rafael Zanolli Revisão gramatical: Patrizia Zagni Editoração eletrônica: Camila Kuwabata e Carolina Kuwabata ISBN: 978-85-7522-251-5 Histórico de impressões: Setembro/2010 Primeira edição 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: [email protected] 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) Loudon, Kyle Desenvolvimento de grandes aplicações Web / Kyle Loudon ; tradução Rafael Zanolli. -- São Paulo : Novatec Editora ; Sebastopol, Calif : O'Reilly, 2010. Título original: Developing large Web applications. ISBN 978-85-7522-251-5 1. HTML (Hyper Text Markup Language) 2. Internet (Rede de computadores) 3. Web sites I. Título. 10-08752 CDD-004.67 Índices para catálogo sistemático: 1. Sites na Web : Criação : Internet : Redes de computadores : Processamento de dados 004.67 2. Web sites : Criação : Internet : Redes de computadores : Processamento de dados 004.67 ORGF20100903 (CIP) Sumário Introdução............................................................................................................................................9 Prefácio..............................................................................................................................................11 Capítulo 1 ■ Princípios........................................................................................................................17 Gerenciamento da complexidade...........................................................................................................17 Componentes modulares.......................................................................................................................19 Atingindo a modularidade............................................................................................................. 20 Benefícios da modularidade............................................................................................................21 Dez princípios para grandes aplicações web...........................................................................................21 Capítulo 2 ■ Orientação a objetos.........................................................................................................23 Fundamentos da POO......................................................................................................................... 24 Por que a orientação a objetos?............................................................................................................. 25 Diagramas de classe UML.................................................................................................................... 26 Generalização............................................................................................................................... 26 Associação.................................................................................................................................... 27 Modelagem de página web................................................................................................................... 27 Definição de tipos de páginas......................................................................................................... 27 Definição dos tipos de módulos..................................................................................................... 28 Escrevendo o código............................................................................................................................ 29 Obtenção da modularidade.................................................................................................................. 30 PHP orientado a objeto......................................................................................................................... 31 Classes e interfaces......................................................................................................................... 31 Herança em PHP........................................................................................................................... 36 JavaScript orientado a objetos.............................................................................................................. 39 Objetos......................................................................................................................................... 39 Herança em JavaScript................................................................................................................... 42 Capítulo 3 ■ HTML em larga escala.......................................................................................................45 HTML modular................................................................................................................................... 46 Um mau exemplo: a utilização de uma tabela e de marcação de apresentação.................................. 46 Um exemplo melhorado: utilizando CSS........................................................................................ 48 O melhor exemplo: HTML com significado semântico.................................................................... 50 Benefícios de um bom HTML........................................................................................................ 54 Tags HTML......................................................................................................................................... 57 Tags HTML ruins.......................................................................................................................... 57 Boas tags HTML . ......................................................................................................................... 58 IDs, classes e nomes....................................................................................................................... 60 Convenções de nomenclatura..........................................................................................................61 5 6 Desenvolvimento de Grandes Aplicações Web XHTML...............................................................................................................................................61 Benefícios do XHTML....................................................................................................................61 Diretrizes para XHTML................................................................................................................. 62 RDFa................................................................................................................................................... 65 Trios RDFa.................................................................................................................................... 66 Aplicação da RDFa.........................................................................................................................67 HTML 5...............................................................................................................................................71 Capítulo 4 ■ CSS em larga escala..........................................................................................................73 CSS modular........................................................................................................................................74 Inclusão das CSS............................................................................................................................74 Aplicação das CSS......................................................................................................................... 77 Especificidade e importância......................................................................................................... 80 Escopos com CSS...........................................................................................................................81 Formatos-padrão de módulos........................................................................................................ 87 Técnicas de posicionamento................................................................................................................. 90 Modelo de caixa CSS..................................................................................................................... 90 Fluxo do documento..................................................................................................................... 92 Posicionamento relativo................................................................................................................. 93 Posicionamento absoluto............................................................................................................... 93 Flutuação...................................................................................................................................... 95 Layouts e containers............................................................................................................................ 96 Exemplos de layouts...................................................................................................................... 97 Exemplos de containers................................................................................................................105 Outras práticas...................................................................................................................................108 CSS de reset, ou reconfiguração, do navegador...............................................................................108 Normalização das fontes................................................................................................................111 Capítulo 5 ■ JavaScript em larga escala..............................................................................................113 JavaScript modular..............................................................................................................................114 Inclusão do JavaScript....................................................................................................................114 Escopos com JavaScript................................................................................................................ 116 Trabalho com o DOM......................................................................................................................... 119 Métodos comuns do DOM........................................................................................................... 119 Bibliotecas DOM populares..........................................................................................................120 Como trabalhar com eventos...............................................................................................................126 Normalização da manipulação de eventos.....................................................................................126 Um mau exemplo: dados globais dentro de manipuladores de eventos............................................127 Um bom exemplo: dados de objeto dentro de manipuladores de eventos........................................128 Aplicações orientadas a eventos.....................................................................................................129 Trabalho com animações.....................................................................................................................130 Animação de movimento..............................................................................................................130 Animação de tamanho...................................................................................................................131 Transição de cores........................................................................................................................ 132 Um exemplo: listas de seleção encadeada...................................................................................... 133 Capítulo 6 ■ Gerenciamento de dados................................................................................................143 Módulos dinâmicos............................................................................................................................144 Gerenciadores de dados...................................................................................................................... 145 Criação de gerenciadores de dados................................................................................................148 Extensão dos gerenciadores de dados............................................................................................150 Sumário 7 Dados que utilizam SQL como fonte.................................................................................................... 152 Um exemplo de SQL..................................................................................................................... 152 Dados que utilizam XML como fonte...................................................................................................156 Um exemplo em XML...................................................................................................................156 Dados de web services.........................................................................................................................160 Dados no formato JSON..................................................................................................................... 161 Cookies e formulários.........................................................................................................................162 Gerenciamento de dados em cookies.............................................................................................162 Gerenciamento dos dados de formulários......................................................................................163 Capítulo 7 ■ PHP em larga escala.......................................................................................................165 Páginas web modulares.......................................................................................................................166 Geração de páginas em PHP......................................................................................................... 167 Trabalho com páginas..........................................................................................................................171 Interface pública para a classe Page................................................................................................171 Interface abstrata para a classe Page.............................................................................................. 175 Implementação da classe Page....................................................................................................... 179 Extensão da classe Page................................................................................................................190 Trabalhando com módulos.................................................................................................................196 Interface pública para a classe Module..........................................................................................196 Interface abstrata para a classe Module.........................................................................................196 Implementações da classe Module................................................................................................198 Extensão da classe Module...........................................................................................................199 Layouts e containers........................................................................................................................... 213 Considerações especiais...................................................................................................................... 216 Manipulação de variações de módulos.......................................................................................... 216 Várias instâncias de um módulo.................................................................................................... 217 JavaScript e CSS dinâmicos........................................................................................................... 218 Implementação de módulos aninhados......................................................................................... 219 Capítulo 8 ■ Ajax em larga escala.......................................................................................................221 No navegador.....................................................................................................................................222 Gerenciamento de conexões..........................................................................................................222 Utilização de bibliotecas Ajax........................................................................................................225 No servidor........................................................................................................................................ 231 Formatos de transmissão.............................................................................................................. 231 Servidor proxy..............................................................................................................................234 Ajax modular...............................................................................................................................236 MVC e Ajax........................................................................................................................................238 Utilização do Ajax com o MVC.....................................................................................................239 Interface pública para o objeto Model...........................................................................................245 Implementação do objeto Model...................................................................................................246 Interface pública para o objeto View..............................................................................................249 Interface abstrata para o objeto View.............................................................................................249 Implementação do objeto View.....................................................................................................249 Interface pública para o objeto Connect........................................................................................250 Interface abstrata para o objeto Connect....................................................................................... 251 Implementação do objeto Connect................................................................................................252 Controladores..............................................................................................................................255 Um exemplo de Ajax com MVC: Listas accordion..........................................................................255 8 Desenvolvimento de Grandes Aplicações Web Capítulo 9 ■ Desempenho..................................................................................................................263 Oportunidades de armazenamento em cache...................................................................................... 264 Armazenamento em cache de CSS e JavaScript.............................................................................. 264 Armazenando módulos em cache..................................................................................................270 Armazenamento em cache para páginas........................................................................................274 Armazenamento em cache com Ajax.............................................................................................275 Utilização de cabeçalhos Expires.................................................................................................. 277 Gerenciamento do JavaScript...............................................................................................................278 Posicionamento do JavaScript.......................................................................................................278 Minificação do JavaScript.............................................................................................................278 Remoção de duplicatas................................................................................................................ 280 Distribuição de recursos...................................................................................................................... 281 Redes de entrega de conteúdo....................................................................................................... 281 Minimização das consultas DNS.................................................................................................. 282 Minimização das solicitações HTTP............................................................................................ 282 Controle sobre a métrica do site......................................................................................................... 286 Testes modulares................................................................................................................................ 288 Utilização de dados de testes........................................................................................................ 289 Criação de dados de testes........................................................................................................... 290 Capítulo 10 ■ Arquitetura de aplicação...............................................................................................293 Pensamento modular..........................................................................................................................293 Organização dos componentes............................................................................................................297 Arquitetura para o site inteiro.......................................................................................................297 Arquitetura de seção.................................................................................................................... 300 Arquitetura para as páginas.................................................................................................................302 Arquitetura e manutenção.................................................................................................................. 305 Reorganização da utilização dos módulos..................................................................................... 305 Adição de variações de módulos....................................................................................................307 Realização de alterações abrangentes............................................................................................. 310 Alterações nas fontes de dados...................................................................................................... 313 Exposição externa de módulos...................................................................................................... 316 Sobre o autor......................................................................................................................................326 Colofão..............................................................................................................................................326 Índice remissivo................................................................................................................................317