Ely Edison Matos mar09 Framework MIOLO 2.5 Ely Edison Matos mar ppt carregar
Ely Edison Matos ely.matos@ufjf.edu.br mar09 Framework MIOLO 2.5 Ely Edison Matos ely.matos@ufjf.edu.br mar09.
PublicouThomas Sequeira Alterado mais de 3 anos atrás
Apresentação em tema: "Ely Edison Matos ely.matos@ufjf.edu.br mar09 Framework MIOLO 2.5 Ely Edison Matos ely.matos@ufjf.edu.br mar09."— Transcrição da apresentação:
1 Ely Edison Matos ely.matos@ufjf.edu.br mar09
Framework MIOLO 2.5 Ely Edison Matos mar09
2 O que é o Miolo? Framework orientado a objetos
para desenvolvimento de aplicações acessíveis via web utilizando PHP5 aplicando padrões de projeto
3 Frameworks Framework O framework dita a arquitetura da sua aplicação
Conjunto de classes cooperantes Que constroem um projeto reutilizável Para uma classe específica de software O framework dita a arquitetura da sua aplicação Você constrói uma aplicação criando subclasses das classes do framework O framework enfatiza a reutilização de projetos Ex: .Net, J2EE, Struts, Spring, Zope, Prado,...
4 Aplicações Web Desafios em aplicações web
Como implementar uma UI mais rica? HTML é bastante restrito Cliente (browser) e servidor são programas **muito** diferentes... O protocolo HTTP é stateless A aplicação deve criar o código para manter o estado entre submissões das páginas Quais são as capacidades do browser ??? Complicações com relatórios, acesso a dados e escalabilidade Diversidade de tecnologias (X)HTML, Javascript, CSS, Linguagem de script server-side, webserver, ... E mais...
5 Padrões de Projeto Padrões de projeto (design patterns)
Nomeia, abstrai e identifica os aspectos-chave de uma estrutura de projeto comum Possibilita criar um projeto orientado a objetos reutilizável "uma solução permanente para um problema em um contexto" Ex: Factory method, singleton, front controller, etc
6 Miolo 2.5 Arquitetura em camadas
Possibilita o padrão MVC (Model-View-Controller) Rico conjunto de componentes UI Usando PHP5 e Javascript (DOJO) Modelo de programação event-driven Fortemente baseado em AJAX Gerenciamento de sessão e estado Aplicações cross-browser Segurança autenticação, permissões, logs Abstração de acesso a Banco de Dados Camada de persistência de objetos MOQL (Miolo Object Query Language) Customização da UI através de temas e templates Geração de arquivos PDF EzPDF, JasperReports
7 Histórico UNIVATES, Lajeado/RS SOLIS: Cooperativa de Software Livre
Início em 2001 Thomas Spriestersbach e Vilson Cristiano Gartner 5 versões RC (Release Candidate) SOLIS: Cooperativa de Software Livre 31/08/2004: versão 1.0-final 26/10/2004: versão 1.0.1 UFJF, Juiz de Fora/MG 2003: desenvolvimento de sistemas corporativos Diversas versões internas à UFJF 2005 Início do desenvolvimento da versão 2 (na UFJF) 2006 Intercâmbio UFJF/Solis 2008 Versão 2.5 unificada (alpha)
10 Conceitos Básicos
11 Aplicação Os sistemas são construídos através do desenvolvimento de módulos O conjunto de módulos é chamado aplicação Assim, de forma geral, cada instalação do framework está associado a uma única aplicação composta por um ou vários módulos integrados Todos os arquivos do framework ficam sob um mesmo diretório Ex: /usr/local/miolo Cada instalação do framework possui um arquivo de configuração <miolo>/etc/miolo.conf
12 Aplicação Implementação do padrão Front Controller
Aplicação é acessada através do arquivo <miolo>/html/index.html Que inclui o controller <miolo>/html/index.php Temas disponíveis em <miolo>/html/themes Uma aplicação é implementada através de módulos
13 Módulo Um módulo é parte de uma aplicação
Um módulo reflete um sub-domínio da aplicação Agregando as classes de negócio que estão fortemente relacionadas Provendo o fluxo de execução (handlers) e a interface com o usuário (forms, grids, reports) para se trabalhar com as classes de negócio Um módulo é caracterizado por um nome, usado como subdiretório do diretório <miolo>/modules. Cada módulo tem uma estrutura padrão de diretórios, usada pelo framework para localizar os recursos Cada módulo possui seu próprio arquivo de configuração <miolo>/modules/<modulo>/etc/module.conf
14 Controles Os controles são componentes de interface com o usuário, usados na renderização das páginas HTML Um controle pode agregar outros controles Possui propriedades e eventos associados Implementados em PHP5 e/ou Javascript
15 Página A página é um controle específico
instanciado da classe Mpage Serve de base para a renderização da página HTML
16 Handler Um handler é um objeto da classe MHandler
Sua função é tratar a solicitação feita pelo usuário através do browser Todas as solicitações são direcionadas a um handler Em cada módulo é definida uma classe Handler<Modulo> instanciada pelo MIOLO quando é feita a análise da solicitação do usuário <miolo>/modules/<modulo>/handlers/handler.class.php O controle é passado para esta classe, que inclui o código específico para tratar a solicitação O código é armazenado em <nome_handler>.inc.php
17 Namespace Namespaces são apenas "apelidos" para diretórios
O objetivo do uso de namespaces é a possibilidade de mudança da localização física dos arquivos, sem a necessidade de se alterar o código já escrito Os namespaces são usados basicamente no processo de importação (include) de arquivos, em tempo de execução A configuração dos namespaces fica em miolo.conf Exemplo modules::admin::business::user
18 URL A URL típica do Miolo tem o formato Onde
index.php: controller principal; é o único arquivo PHP acessado diretamente pelo webserver module: indica o módulo a ser acessado action: indica a seqüência de handlers (h1, h2, ...) que será executada item: variável global que pode ser usada pelos handlers
19 URL Executar uma ação (handler)
host.dominio é o nome de domínio do site index.php o manipulador principal do miolo module=<módulo> nome do módulo a ser usado action=<ação> string no formato "handler1:handler2:...:handlerN", onde cada handler indica o arquivo que será chamado dentro do módulo, na seqüência estabelecida item=<item> variável auxiliar que pode ser usada no processamento da página outras variáveis criadas pela aplicação e repassadas via url para auxiliar na manipulação da página
20 URL Acessar arquivos armazenados dentro dos módulos (dentro do diretório html) Imagens: PDF: Texto: CSS: host.dominio é o nome de domínio do site index.php o manipulador principal do miolo module=<módulo> nome do módulo a ser usado action=namespace string que indica a localização do arquivo, com base no namespace
21 Fluxo de Execução
22 Variáveis Globais $MIOLO: acesso a instancia da classe principal do framework $page: acesso ao objeto MPage $context: acesso ao objeto Mcontext $theme: acesso ao objeto Mtheme $auth: acesso ao objet MAuth $perms: acesso ao objeto Mperms $state: acesso ao objeto Mstate $log: acesso ao objeto Mlog $navbar: acesso ao objeto Navigation $module: nome do módulo do handler em execução (ex: 'admin') $action: path do handler em execução $item: campo item da url atual $url: url completa do handler da ação sendo executada
24 SPA Javascript SPA – Single Page Application
Integração com framework DOJO Comunicação entre o browser e o servidor através de AJAX SPA – Single Page Application Página base: template base.php Uma página é dividida em "elementos do tema" ThemeElement - representados por elementos <div> A cada chamada Ajax, será obtido como retorno o conteúdo HTML que deve ser renderizado em cada elemento do tema.
25 SPA Uma página HTML poderá conter vários forms
Cada form agrupa os controles cujos conteúdos serão enviados juntos em uma submissão Diálogos (janelas) são também representados por <form> inseridos em <div>. O form principal é chamado "__mainForm" Base para a renderização dos controles enviados pelo servidor Dentro deste __mainForm são renderizados os vários elementos do tema (top, menus, navigation, content, etc)
26 Controles Os controles no Miolo estão organizados em uma hierarquia
Encapsulam a lógica do controle (em PHP) o código javascript associado (se houver) eventos associados classes CSS usadas na renderização A renderização do controle é feita através do método generate() Método generateInner(): gera o código HTML referente ao controle Controles que herdam de Mdiv são renderizados dentro de uma box (tag <div>) A renderização está encapsulada na classe MHTMLPainter (<miolo>/classes/ui/painter). Cada método desta classe recebe um objeto e gera o código HTML correspondente.
27 Controles "Controles Atômicos" são aqueles renderizados diretamente através de uma tag HTML Deve-se evitar escrever qualquer código HTML dentro da lógica do controle, bem como qualquer estilo que possa ser definido via CSS Como regra geral, um controle não-atômico é formado pela composição de controles atômicos. Atributos CSS podem ser propriedades do objeto referente ao controle (atribuídas diretamente ao objeto) ou podem ser definidos via método addStyle(). Cada controle é definido em um arquivo próprio, em <miolo>/classes/ui/controls. Os usuários também podem construir seus próprios controles com base nos já existentes, através de herança.
28 Eventos Eventos javascript (click, mouseover, etc) e chamadas AJAX associadas ao controle método addEvent(evento, handler, preventDefault) ou addAttribute(evento, "javascript:<codigo>") Todos os eventos adicionados com addEvent() devem terminar com ';'
29 Temas Definição do layout da página HTML que será enviada para o cliente Container lógico para a página elementos visíveis Código HTML elementos não-visíveis arquivos CSS, scripts Javascript, tag meta do html O tema define como a página será "dividida" como os controles HTML serão renderizados Reúne as tecnologias HTML, DHTML, Javascript, CSS
30 Temas Menu Top Navigation Content StatusBar Cada uma destas áreas é definida por um elemento do Tema (classe MThemeElement) e manipulada através dos métodos expostos pela classe MTheme
31 Temas Cada ThemeElement é renderizado como um controle HTML Div, com um atributo "id" ou "class", definido no tema
32 Temas Os temas estão definidos em Classe Theme<tema> Templates
<miolo>/html/themes Classe do tema, arquivos CSS e templates Classe Theme<tema> Arquivo mtheme.class.php Define os métodos para layouts específicos: base, default,dynamic, window e lookup Cada elemento do tema: navbar, content, etc. Templates Definem o conteúdo de cada elemento do tema base.php, default.php, window.php
33 Webforms Cada página gerada pelo processamento da seqüência de handlers, possui um ou mais formulários HTML Que servem como containers para os controles presentes na página $this->page->isPostBack() Testa se a página está sendo chamada a primeira vez, ou se ocorreu um "post" do formulário Eventos Os botões do tipo "submit" são programados para gerar eventos quando clicados O nome padrão do evento é <nome_do_botão>_click Pode-se usar o método AttachEventHandler, para definir um outro nome para o método que vai tratar o evento Um evento (com parâmetros) pode ser indicado na URL através da variável "event"
34 Webforms
35 AJAX A implementação do AJAX no Miolo 2.5 usa o framework javascript DOJO e a biblioteca CPAINT De forma geral, pode-se usar a string ':nome_metodo' no lugar de uma URL É feito um POST para a URL corrente E executado o método "nome_metodo" Que recebe como parâmetro um objeto com os valores dos campos do formulário Parâmetros específicos podem ser passados para o método ":nome_metodo;par1;par2" Exemplo new Mbutton('btnPost','Send',':doSomething');
36 AJAX A maior parte da interação entre o browser e o webserver é feita via AJAX A primeira página é gerada via chamada GET O form HTML principal é chamado __mainForm A partir daí são usados os métodos Javascript (m_miolo.js): doPostBack(eventTarget, eventArgument, formSubmit) : simula o submit (POST) da página. doLinkButton(url, eventTarget, eventArgument, formSubmit) : simula o submit (POST) da página para o handler indicado por url. doAjax(eventTarget, eventArgument, formSubmit) : faz uma chamada Ajax. doHandler(url, formSubmit) : simula uma chamada GET para URL. doLink(url, formSubmit) : simula uma chamada GET, alterando o action do form para URL. doRedirect(url, element) : simula um HTTP Redirect
37 AJAX Do lado do servidor duas classes apóiam o uso do AJAX: MPage e MAjax MPage generateForm Renderiza o conteúdo de __mainForm ou de windows generateBase Gerar a página principal, ou quando é feita uma chamada via GET (sem AJAX) generateAjax Responde a uma chamada AJAX (com preenchimento de um ou vários elementos) setElementValue($element, $value) Atribui o valor de $element usando Javascript copyElementValue($element1, $element2) Copia o valor de $element1 para $element2 usando Javascript
38 AJAX MAjax Encapsula a biblioteca Ajax no lado servidor
Geralmente acessada através de $this->manager->ajax Métodos setResponseControls($controls,$elements='') $controls e $elements definem, respectivamente, o controle (ou array de controles) que serão exibidos e o id (ou array de ids) dos elementos que receberão o código HTML gerado através dos controles. setResponseScripts($scripts=array()) Define o conteúdo do array response->scripts. setResponse($controls,$elements='',$scripts=array()) Define simultaneamente os controles, os elementos e os scripts que serão enviados como retorno de uma chamada ajax.
39 Camada de Acesso a Dados
40 DAO – Data Access Objects
O mecanismo de acesso a dados fornecido pelo PHP é encapsulado, permitindo uma interface única de programação. Mecanismos básicos para geração automática de código SQL adaptado ao banco inclusive joins, offsets e número máximo de linhas retornadas uso de geradores (sequences) conversão de datas e horários para um formato padrão Uso de transações, utilizando recursos nativos do banco de dados sendo acessado Abstração de resultados de consultas (queries) em ResultSets operações como travessia (browse), paginação, filtragem e ordenação do resultado de uma consulta
41 DAO – Data Access Objects
Classes Class MDatabase Define uma interface padrão para acesso a banco de dados, encapsulando as diversas extensões do PHP Suporte a transações, conversão de tipos DATE/TIME, Generators/Sequences e geração de arquivos CSV/XML Classe MSQL Encapsula a criação de comandos SQL, inclusive joins e ranges Classe MQuery Usa o conceito de "ResultSet" $query->result : array com linhas e colunas do resultado Métodos para navegação no resultado das queries MoveFirst(), MoveLast(), MoveNext(), etc. SGBDs Oracle, PostgreSQL, MySQL, SQLite, MSSQL, Firebird e ODBC
42 Persistência de Objetos
Mapeamento (via XML) das classes de negócio Mapeamento (via XML) das associações/herança entre classes (1:1, 1:N, N:N) Realização de queries utilizando a MOQL (Miolo Object Query Language ), com o uso de "criterias" Conversão automática de tipo/conteúdo de atributos Indexação de atributos Utilização de subqueries Manipulação de campos BLOB Operações de conjuntos (UNION, INTERSECT) Uso de OUTER JOINS
43 Persistência de Objetos
44 Persistência de Objetos
Mapeamento de associação N:N
45 Persistência de Objetos
MOQL – Miolo Object Query Language
46 Camada Lógica de Negócio
47 MBusiness As regras de negócio devem ser encapsuladas em objetos que representam as classes do domínio da aplicação No MIOLO, estas classes devem estender da classe MBusiness MBusiness herda da classe de persistência, tornando os objetos de negócio virtualmente persistentes métodos save, delete e retrieve métodos para fazer o controle de transações. Nomeação class Business<modulo><classe> extends MBusiness Assim, a classe Pessoa, definida no módulo Common deve ser nomeada class BusinessCommonPessoa extends Mbusiness
49 Base de Dados ADMIN
50 Direitos de Acesso define('A_ACCESS', 1); // 000001
define('A_QUERY', 1); // define('A_INSERT', 2); // define('A_DELETE', 4); // define('A_UPDATE', 8); // define('A_EXECUTE', 15); // define('A_SYSTEM', 31); // define('A_ADMIN', 31); // define('A_DEVELOP', 32); //
51 Autenticação Classe MAuth
$auth->checkLogin() verifica se há algum usuário logado, redirecionando para o formulário de login, se não houver. $auth->authenticate($uid, $pwd) autentica o usuário $uid, com a senha $pwd $auth->authenticate($uid, $challenge, $response) autentica o usuário $uid, que possui a senha armazenada em MD5, usando o mecanismo challenge-response. Depois de autenticado, os dados do usuário (e os grupos aos quais ele pertence) são armazenados na sessão e registrados no objeto MLogin.
52 Autorização Classe MPerms
$perms->checkAccess($transaction, $access, $deny = false) verifica se o usuário logado tem, no mínimo, o direito $access (um número inteiro) na transação $transaction. $deny = true indica que o processamento será interrompido caso o usuário não tenha direito de acesso e $deny = false faz com que o método retorne FALSE, sem interromper o processamento. $perms->isAdmin() retorna TRUE se o usuário logado for administrador (se pertence ao grupo ADMIN).
53 Logs Classe MLog Mensagens genéricas, erros, comandos SQL
Armazenados em Arquivos (<miolo>/var/log) Banco de dados ADMIN (tabela miolo_log) enviados via rede (socket TCP/IP) Níveis O: nenhum log 1: somente erros 2: erros e mensagens
54 Debug e Exceções
55 Debug Trace $MIOLO->trace($msg, $file = '', $line = 0)
registra uma mensagem genérica no log. $file e $line podem ser usados para prover informações adicionais $MIOLO->traceStack() registra no log um "stack trace", que permite acompanhar quais métodos foram executados até o instante.
56 Exceções EmioloException EInOutException EDatabaseException
exceção genérica. Estende Exception do PHP5. EInOutException acesso a arquivos EDatabaseException acesso a banco de dados EDatabaseExecException execução de comandos DML (insert, update, delete) EDatabaseQueryException execução de comandos SELECT EDataNotFoundException exceção genérica de acesso a dados EDatabaseTransactionException execução de transações no banco de dados
57 Exceções EControlException EUsesException EFileNotFoundException
execução dos handlers EUsesException inclusão de arquivos EFileNotFoundException acesso a arquivos ESessionException acesso a sessão EBusinessException exceção genérica associada a objetos MBusiness ETimeOutException exceção associada à expiração da sessão ELoginException falha na autenticação ESecurityException falha na autorização
58 Visão Geral
Carregar ppt "Ely Edison Matos ely.matos@ufjf.edu.br mar09 Framework MIOLO 2.5 Ely Edison Matos ely.matos@ufjf.edu.br mar09."