Aplicações Profissionais para Internet com Zend Framework
Flávio Gomes da Silva Lisboawww.fgsl.eti.br
@fgsl
Aviso
Você pode copiar e distribuir livremente esta apresentação, mas cite a fonte.
noteaqui.com
Nossa agenda
1)Breve currículo2)Internet3)PHP4)Problemas de Construção de Software5)Zend Framework
Breve currículo
http://www.temporealeventos.com.br
InternetGUERRA FRIA
infoescola.com
Internetoliveirarock.blogspot.com
Internet
http://pt.wikipedia.org/wiki/Wernher_von_Braun
Werner Von Braun
Internet
Foguetes V1 e V2
bloggeae.blogspot.com
mediastorehouse.com
Internet
antiilluminati.blogspot.comhistory.nasa.gov
Internet
aps.org
Sergei Korolev
obviousmag.org
Internet
hardware.com.br
InternetARPANET (1969)
infoescola.compersonalpages.manchester.ac.uk
InternetNSFNET (1985)
computerhistory.org
InternetWorld Wide Web (1990)
http://en.wikipedia.org/wiki/File:First_Web_Server.jpg Sir Tim BernersLee
InternetWorld Wide Web (1990)
Tim BernersLee especificou a HTML – Hypertext Markup Language, e escreveu um browser e um web server.
en.kioskea.net
InternetCERN publica o projeto WWW (1991)
askamathematician.com
InternetNCSA Mosaic (1993)
appleinsider.com
InternetNetscape (1994)
supportcave.com
InternetJavascript (1995)
Javascript é uma linguagem de script padronizada pela especificação ECMA262 e pela norma ISO/IEC 16262.
Ela permite o processamento de eventos no cliente.
marketingshift.com
InternetInternet Explorer (1995)
http://en.wikipedia.org/wiki/File:Internet_Explorer_1.0.png
InternetInternet Explorer (1995)
operawatch.com
gednt.blogspot.com
InternetConseqüências da Internet
www.fgsl.eti.br
PHPPersonal Home Page (1995)
PHP
Fonte: Zend Whitepaper PHP
PHP
Fonte: Zend Whitepaper PHP
PHP
PHP (hoje PHP Hypertext Preprocessor) é uma linguagem de programação compreensiva e completa em funcionalidades com sólido suporte a orientação a objetos.
PHP não precisa tem de ser compilado porque o Zend Engine compila o código em tempo real.
PHP é livre e aberta, bem documentada e mantida em comunidade (www.php.net).
PHP
Ocorrências do PHP em tipos de aplicação
PHP
A solução mais complexa raramente é a certa. (...) enquanto outras soluções que nos cercam parecem ficar maiores e mais complexas, estamos nos esforçando para simplificar e racionalizar o PHP (...).
Rasmus Lerdorf
PHPPHP trata a imprevisibilidade
Independente da classe a ser usada:
$object = new $class();
Independente do método a ser executado:
$result = $object->$method();
PHPPHP generaliza o código
Métodos dinâmicos:
public function __call($method,$arguments)
public function __callStatic($method,$arguments)
public function __invoke()
$result = $object();Leitura, gravação e criação dinâmica de atributos:
public function __get($attribute)
public function __set($attribute,$value)
PHPQuem usa PHP
PHPUtilização do PHP no mundo
Em 12 milhões de domínios.Fonte: http://phpadvent.org/2010/usagestatisticsbyiliaalshanetsky
PHPCombinação poderosa
Problemas na Construção de Software
Não basta o anel do Lanterna Verde
http://aneldolanternaverde.blogspot.com/
Problemas na Construção de Software
É preciso alguém preparado.
museudoheroi.blogspot.com
Problemas na Construção de Software
Senão qualquer um podia ser.
emeralddawn.com
Problemas na Construção de Software
Estamos falando de aplicações profissionais para Internet e não de “sitiozinhos”.
Estamos falando de sistemas de informação e não de páginas pessoais.
Problemas na Construção de Software
Não somos capazes de escrever programas isentos de falhas
Jocélio Passos. Msc (UFPE)
Ninguém tem um cérebro grande o bastante para conter um programa de computador moderno
Edsger Djikstra (1972)
Problemas na Construção de Software
O trabalho do programador é desumano porque se exige que eles (sic) escrevam grandes
quantidades de código complexo sem erros e em um curto espaço de tempo
Jocélio Passos. Msc (UFPE)
Problemas na Construção de Software
O software muda...
A evolução de software refletese numa necessidade intrínseca pelo desenvolvimento e a
manutenção contínua de sistemas, para endereçar uma aplicação, ou resolver um
problema no domínio do mundo realLehman e Ramil 2001 APUD Hattori 2008
Problemas na Construção de Software
E de acordo com a arquitetura do software, a mudança pode ser complicada...
Problemas na Construção de Software
Fatos:
A manutenção é a fase mais longa do desenvolvimento de um software.
Manutenções podem gerar problemas. [1]
Mudanças triviais podem gerar uma reação em cadeia de erros. [2]
Se o software é feito em grupo, os erros aumentam. [3]
[1],[2].[3]: Jocélio Passos
Problemas na Construção de Software
Solução:
Construir software a partir de blocos de construção complexos (componentes). [1]
Construir coisas complexas a partir de coisas simples.
Construir coisas mais complexas a partir de coisas complexas.
[1]: Jocélio Passos
Problemas na Construção de Software
Novo problema:Como aplicar essa solução?
Zend Framework
Padrão de CodificaçãoModelo de Criação de Componentes
Biblioteca de Componentes Reutilizáveis
Livre e Aberto
Baseado em Padrões Abertos
Documentado
☻Projeto modular►Evita a complexidade que advém com o crescimento
☻Melhores práticas►Você absorve as práticas e bons hábitos dos criadores do framework
☻Componentes►Mantém você com novas tecnologias
carpediemlica.blogspot.com
Para que um framework?
☻Nenhum framework é completo►Nenhum software é completo
☻Frameworks devem ser mínimos►Fuja de soluções completas e definitivas
☻Como eu integro o framework X dentro do framework que eu escolhi►Se ele não for fracamente acoplado, você não integra!
school.discoveryeducation.com
Por que Zend Framework?
☻Um ponto de partida para aplicações PHP, que provê:►Características de segurança;►Projeto modular
☻Uma coleção de mais de 70 componentes PHP para simplificar tarefas comuns, incluindo alguns para:►Criação (e reuso) de formulários►Logging►Acesso a banco de dados☻Uma demonstração das melhores práticas de PHP 5☻Provê padrões e grande funcionalidade mas não cria dificuldades para seu estilo de programação. Seu desenvolvimento não é limitado de forma alguma.
Zend Framework Features
☻Criação da estrutura e componentes de um projeto PHP OO MVC►Ferramenta para linha de comando►Pode ser integrado com uma IDE, como Eclipse
Zend Tool
☻ModeloClasses reusáveis que acessam dados e regras de negócioMantém SQL e detalhes da aplicação em um só lugar
☻VisãoTemplates contendo HTML ou outra saída, com poucos trechos de PHPColoca seu HTML em uma “visão” sem preocupação em sobrescrever o código PHP principal – e ajuda web designers a trabalharem com programadores de regras de negócio
☻Controlador (controlador de página)Fluxo da aplicaçãoConecta modelo e visãoNão confunda com “controlador frontal”, que apenas inicializa o MVC
enciclopedia.com.pt
bignadaquasar.wordpress.com
oglobo.globo.com
MVC
Do Controlador Frontal para o Controlador de Página
Controlador Frontal roteia URLs amigáveis
Convenção de roteamento padrão:http://exemplo.com.br/controller/action/param1/value1...
controller mapeia para o nome da
classe action mapeia para o nome do
método
Pares param/value são passados para a
ação
FrontController
Controller1action1()action2()
Controller2action1()action2()
Bootstrap:index.php
HTTP request
index.php: passagem obrigatória
Todas as requisições passam por index.php no doc root. Este é o único diretório público.index.php inicializa a aplicação e instancia o Zend_Controller_Front.O roteamento depende do módulo mod_rewrite estar disponível. A regra de reescrita pode ser definida no arquivo httpd.conf (ou em outro .conf ) ou por meio de arquivos .htaccess (o que exige AllowOverride All).
Zend_Application
Deixa a configuração e inicialização separadas
$application = new Zend_Application( APPLICATION_ENV, APPLICATION_PATH . '/configs/application.ini');$application->bootstrap() ->run();
Zend_Application
[production]phpSettings.display_startup_errors = 0phpSettings.display_errors = 0includePaths.library = APPLICATION_PATH "/../library"bootstrap.path = APPLICATION_PATH "/Bootstrap.php"bootstrap.class = "Bootstrap"appnamespace = "Application"resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"resources.frontController.params.displayExceptions = 0resources.frontController.baseUrl = BASE_URLresources.frontController.plugins.controller = "Fgsl_Plugin_Controller"resources.layout.layout = "layout"resources.db.adapter = "pdo_pgsql"resources.db.params.host = "localhost"resources.db.params.username = "postgres"resources.db.params.password = "postgres"resources.db.params.dbname = "tudodb"resources.db.isDefaultTableAdapter = true
[staging : production]
[testing : production]phpSettings.display_startup_errors = 1phpSettings.display_errors = 1
[development : production]phpSettings.display_startup_errors = 1phpSettings.display_errors = 1resources.frontController.params.displayExceptions = 1
Zend_Controller_Action
Classes de controle manipulam grupos de requisiçõeshttp://exemplo.com/controller/action
Padrão: IndexControllerOrganiza e agrupa funcionalidadesUma classe (herdeira de Zend_Controller_Action) para cada controlador
Métodos de ação em cada classe de controle manipulam requisiçõeshttp://exemplo.com.br/controller/action
Padrão: indexAction()Algo como actionAction()
Exemplo: Se action é “edit” então o método é editAction()
Zend_Controller_Action
Zend_Loader_Autoloader
Na verdade, não é preciso usar require ou include... pelo menos não mais que uma vez!No index.php, coloque isto:require_once 'Zend/Loader/Autoloader.php';
$autoloader = Zend_Loader_Autoloader::getInstance();$autoloader->registerNamespace('Zend');
Zend_View
Scripts (templates)Templates baseados em scripts PHP para apresentação de dadosDevem conter somente lógica de exibição, não lógica de negócio
Nomeação padrão: “myaction.phtml”
HelpersClasses e métodos que provêem funcionalidade de visão reutilizável
Exemplos helpers embutidos: escape(), formText(), partial(), partialLoop(), headTitle()Escreva os seus também
Layout: Zend_Layout
Zend_View
Você pode substituir literais HTML no script de visão por comandos PHP echo:
<?php echo $this->productNum ?>
ZF provê padrões inteligentes
O view helper $this->escape() usa a função htmlentities() recomendada pela maioria dos especialistas em segurança.
Faça seu view helper
class Zend_View_Helper_Title_Case {
public $view;
public function titleCase($string = '')
{
return ucwords(strtolower(trim($string)));
} //(public function titleCase())
public function setView(Zend_View_Interface $view) {
$this->view = $view;
}
}
Uso:echo $this->titleCase(‘mozilla firefox’);
Controlador chama visão...
...automaticamente
Zend_Layout
Dá a seu site uma aparência consistente enquanto retém a flexibilidade
Padrão Two-step viewUsa Zend_View para renderização
Marcadores úteis para configurar javascript, títulos e outros dados variáveis
Zend_Layout
Zend_... Model?
Classes modelo são representações abstratas de dados
Podem ser estendidas de:Zend_Db_Table – Para abstração de banco de dadosOu qualquer outra classe que se encaixe em sua necessidadeOu construa suas próprias representações abstratas de seus dados
Classes modelo podem conter lógica de negócio para preparar dados complexos para apresentação
Código que seja estranho ao controlador e a visão é um bom candidato a ficar no modelo.
Zend_Form
Cria o HTML para seus formulários de entrada
$form = new Zend_Form();
$form->addElement(‘text’, ‘ordernum‘);
$form->addElement(‘text’, ‘date‘);
Vários modos de imprimir os elementos de formulário
echo $form; // tudo ou
echo $form->ordernum; // só o especificado ou
echo $form->getElement(‘ordernum’);
HTML gerado pelo último echo
<input type=“text” name=“ordernum” id=“ordernum”>
Zend_Form
Pode ser integrado com Zend_Filter, para fazer conversões de dadosPode ser integrado com Zend_Validate, para fazer validação de dados.Pode ser integrado com o Dijit do Dojo Toolkit para implementar RIA.
Zend_Db
Zend_Db pode criar SQL para você
Strings SQL tendem a causar erros e não são curtas
Zend_Db oferece muito mais do que apenas criar SQL
quoting consistenteescapingprepared statements (substituições para “?”)profiler
Zend_Db
Zend_Db implementa padrões para acesso a dados
Data Table GatewayData Row GatewayData MapperActive Record
Muitos componentes...
Segurança
Autenticação, Autorização, Filtragem, Validação
bahianoticias.com.br
Infraestrutura
Registro Global, Sessão, Carregador de classes...
odebrechtonline.com.br
Performance
Cache, memória...
automaistv.com.br
Web Services
XMLRPC, SOAP, REST
Nuvem
Zend_GData, Zend_Service_Amazon, Zend_Service_WindowsAzure, Zend_Cloud
pelapositiva.blogspot.com
Integração com Dojo Toolkit
Frontend dinâmico, com animações e gráficos.
Mais informações:
http://framework.zend.com http://www.fgsl.eti.brhttp://www.temporealeventos.com.br
Referências
http://www.facape.br/jocelio/es/material_em_pdf_conceitual/ESFuturoSW.pdf
http://www.inf.usi.ch/phd/hattori/downloads/Dissertacao_LilePalmaHattori.pdf im.ufba.br/pub/MATA63/.../MATA63 ProjetoDeSoftware01.ppt