Aplicações Profissionais para Internet com Zend Framework

Preview:

DESCRIPTION

Palestra apresentada na 1ª Compweek, em Jales, em 14 de setembro de 2011.

Citation preview

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

anti­­illuminati.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 Berners­Lee

InternetWorld Wide Web (1990)

Tim Berners­Lee 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 ECMA­262 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/usage­statistics­by­ilia­alshanetsky

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 reflete­se 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

carpediem­lica.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

XML­RPC, SOAP, REST

Nuvem

Zend_GData, Zend_Service_Amazon, Zend_Service_WindowsAzure,  Zend_Cloud

pela­positiva.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 ProjetoDeSoftware­01.ppt