arquitetura php mairon guerra bathaglini (mga@trf4.jus.br)mga@trf4.jus.br diretoria de tecnologia da...

Post on 07-Apr-2016

257 Views

Category:

Documents

4 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Arquitetura PHP

Mairon Guerra Bathaglini(mga@trf4.jus.br)

Diretoria de Tecnologia da Informação

Tribunal Regional Federal da 4ª Região

Passos iniciais da elaboração:

Padrão de Codificação PHP Padrão de Modelagem de Dados Padrão de Interfaces Web Definição da Arquitetura de Código

Padrão de Codificação PHP Classes e Interfaces (substantivos no singular):Pessoa, Endereco, Processo, TipoProcesso

Atributos (prefixo + qualificador):NumIdade, StrNome, DtaNascimento, DthEntrega, ObjProcessoDTO, ...

Métodos (verbos no infinitivo, letras minúsculas, ...):cadastrar, calcularJuros

Padrão de Modelagem de DadosPadrão de Modelagem de Dados

id_ nome da tabela (PK/FK) sin_ campo sinalizador que aceita apenas os valores S ou

N sta_ status multi-valorado. Ex.: S=Servidor, M=Magistrado dta_ data dth_ data/hora din_ dinheiro sin_ativo exclusão lógica

Padrão de Modelagem de DadosPadrão de Modelagem de Dados

Padrão de InterfacesPadrão de Interfaces

Casos de Uso e Regras de Negócio e Interface

Cliente

Responsabilidades separadas com uma camada fornecendo serviços para outra.

RN BD Cliente

Arquitetura n CamadasArquitetura n Camadas

DTOs DTOs

class SerieDTO extends InfraDTO {

public function getStrNomeTabela() { return 'serie'; }

public function montar() {

$this->adicionarAtributoTabela(InfraDTO::$PREFIXO_NUM, 'IdSerie', 'id_serie'); $this->adicionarAtributoTabela(InfraDTO::$PREFIXO_STR, 'Nome', 'nome'); . . . $this->configurarPK('IdSerie',InfraDTO::$TIPO_PK_NATIVA ); $this->configurarExclusaoLogica('SinAtivo', 'N');

}}

class InfraDTO { public abstract function getStrNomeTabela();public abstract function montarDTO(); . . .}

Data Transfer ObjectData Transfer Object

DocumentoDTO

ObjetogetNumIdSerie()

InfraDTO

__call ($func,$args)

get<atributo>set<atributo>unSet<atributo>isSet<atributo>

ret<atributo>unRet<atributo>isRet<atributo>setOrd<atributo>getOrd<atributo>unOrd<atributo>isOrd<atributo>

retTodosunRetTodosunSetTodosunOrdTodos

InfraDTOInfraDTO

set – configura valor de um atributo get – recupera valor de um atributo ret – indica que o atributo deve ser retornado setOrd – indica que o atributo deve ser usado

para ordenação do resultado

InfraDTOInfraDTO

adicionarAtributo adicionarAtributoTabela adicionarAtributoTabelaRelacionada

configurarPK configurarFK

InfraDTOInfraDTO

configurarPK

$this->configurarPK('IdSerie',InfraDTO::$TIPO_PK_NATIVA );

$TIPO_PK_INFORMADO $TIPO_PK_SEQUENCIAL (tabela infra_sequencia) $TIPO_PK_NATIVA (tabela “seq_” com identity)

InfraDTOInfraDTO

adicionarAtributo$this->adicionarAtributo(InfraDTO::$PREFIXO_STR, 'DescricaoModeloEdoc');

$PREFIXO_NUM $PREFIXO_DIN $PREFIXO_DBL $PREFIXO_STR $PREFIXO_DTA $PREFIXO_DTH $PREFIXO_BOL $PREFIXO_ARR $PREFIXO_OBJ $PREFIXO_BIN

InfraDTOInfraDTO

adicionarAtributoTabela $this->adicionarAtributoTabela(InfraDTO::$PREFIXO_NUM, 'IdSerie', 'id_serie');

InfraDTOInfraDTO

adicionarAtributoTabelaRelacionada$this->adicionarAtributoTabelaRelacionada( InfraDTO::$PREFIXO_STR,

'NomeGrupoSerie', 'nome', 'grupo_serie');

configurarFK$this->configurarFK('IdGrupoSerie', 'grupo_serie', 'id_grupo_serie');

InfraDTOInfraDTO

configurarFKconfigurarFK($strAtributo, $strTabelaRelacionada,

$strCampoRelacionado, $numTipoFK, $numFiltroFK)

$TIPO_FK_OBRIGATORIA (default) $TIPO_FK_OPCIONAL

$FILTRO_FK_ON (default) $FILTRO_FK_WHERE

InfraDTOInfraDTO

1) Retornar nome, descricao, nome do grupo;2) Somente para séries com ID <= 100;3) Ordenadas pelo nome

$objSerieDTO = new SerieDTO();$objSerieDTO->retStrNome();$objSerieDTO->retStrDescricao();$objSerieDTO->retStrNomeGrupoSerie();

$objSerieDTO->setNumIdSerie(100,InfraDTO::$OPER_MENOR_IGUAL);

$objSerieDTO->setOrdStrNome(InfraDTO::$TIPO_ORDENACAO_ASC);

$objSerieRN = new SerieRN();$arrObjSerieDTO = $objSerieRN->listar($objSerieDTO);

SELECT serie.nome,serie.descricao,grupo_serie.nome AS nomegruposerie FROM serie INNER JOIN grupo_serie ON serie.id_grupo_serie=grupo_serie.id_grupo_serie WHERE serie.id_serie<=100 AND serie.sin_ativo='S' ORDER BY serie.nome ASC

ExemploExemplo

Operadores $OPER_IN $OPER_NOT_IN $OPER_IGUAL $OPER_DIFERENTE $OPER_LIKE $OPER_NOT_LIKE $OPER_MAIOR $OPER_MENOR $OPER_MAIOR_IGUAL $OPER_MENOR_IGUAL

InfraDTOInfraDTO

SerieBD

Tabeladocumento

DTOs DTOs

InfraRN

SerieRN

InfraBD

RNRN

RNx BDx Tabela X

Tabela Y

2ª Camada

RNy BDy

3ª Camada

Clientes

1ª Camada

Comunicação ocorre somente entre RNs garantindo que sempre as permissões de acesso, regras de negócio e auditoria serão executadas;

Uma RN não pode chamar uma BD de outra classe; Não deve ocorrer comunicação direta entre BDs; Uma BD NÃO pode persistir/atualizar dados em mais de uma

tabela;

DocumentoRN

DocumentoBD

Tabeladocumento

DocumentoRN001

DocumentoRN002

DocumentoRN003

DTOs DTOsDocumentoRN

DocumentoBD

Tabeladocumento

DocumentoRN001

DocumentoRN002

DocumentoRN003

DTOs DTOsDocumentoRN

DocumentoBD

Tabeladocumento

DocumentoRN001

DocumentoRN002

DocumentoRN003

DTOs DTOsDocumentoRN

DocumentoBD

Tabeladocumento

DocumentoRN001

DocumentoRN002

DocumentoRN003

DTOs DTOsDocumentoRN

DocumentoBD

DocumentoRN001

DocumentoRN002

DocumentoRN003

DTOs DTOsDocumentoRN

DocumentoBD

DocumentoRN001

DocumentoRN002

DocumentoRN003

DTOs DTOsDocumentoRN

DocumentoBD

DocumentoRN001

DocumentoRN002

DocumentoRN003

DTOs DTOsDocumentoRN

DocumentoBD

DocumentoRN001

DocumentoRN002

DocumentoRN003

DTOs DTOs

AssinaturaRN Tabela

assinaturaAssinaturaRN001

AssinaturaRN002

DTOsAssinaturaRN

AssinaturaRN001

AssinaturaRN002

DTOsTabela

assinatura

AssinaturaRN

AssinaturaRN001

AssinaturaRN002

DTOsTabela

assinatura

AssinaturaRN

AssinaturaRN001

AssinaturaRN002

DTOsAssinaturaRN

AssinaturaRN001

AssinaturaRN002

DTOsAssinaturaRN

AssinaturaRN001

AssinaturaRN002

DTOsAssinaturaRN

AssinaturaRN001

AssinaturaRN002

DTOs

AssinaturaRN001

AssinaturaRN002

DTOs AssinaturaBD

DTOs

RN - Um façade para cada objetoRN - Um façade para cada objeto

A RN deve ser vista como uma provedora de serviços (seja para a interface ou para web-services)

SerieRNObjetocadastrar()

InfraRN

__call ($func,$args) cadastrarControlado()

RN – Métodos Conectados e ControladosRN – Métodos Conectados e Controlados

protected function cadastrarControlado(SerieDTO $objSerieDTO) protected function listarConectado(SerieDTO $objSerieDTO)

Abre ou não conexãoAbre ou não transaçãoEm caso de erro cancelaTransação

RN – Métodos PadronizadosRN – Métodos Padronizados Cadastrar Consultar Alterar Excluir Listar Contar Desativar Reativar Bloquear

Controlado Conectado

SerieRNSerieBD

objSerieDTO objSerieDTO

InfraSequencia

cadastrar (objSerieDTO)

Envia-se um DTO preenchido com os atributos para cadastro (set). Se for uma chave-primária seqüencial então o atributo correspondente deve ser configurado com null.

É retornado um DTO porque pode ser necessário recuperar a chave-primária gerada no caso de chaves seqüenciais. Neste caso o atributo correspondente a chave-primária é enviado nulo no DTO e volta preenchido.

cadastrar (objSerieDTO)

RN – CadastrarRN – Cadastrar

InfraRN

SerieRN

class SerieRN extends InfraRN { public function __construct(){ parent::__construct(); }

protected function inicializarObjInfraIBanco(){ return BancoSEI::getInstance(); } protected function cadastrarControlado($objSerieDTO) { try{ //permissao SessaoSEI::getInstance()->validarPermissao("serie_cadastrar");

//Validacoes $objInfraException = new InfraException(); // $objInfraException->lancarValidacoes(); $objSerieBD = new SerieBD($this->getObjInfraIBanco()); $ret = $objSerieBD->cadastrar($objSerieDTO);

return $ret;

}catch(Exception $e){ throw new InfraException("Erro cadastrando série.",$e); } }...}

RN – Código Exemplo

SerieRN SerieBDalterar (objSerieDTO)

• Envia-se um DTO preenchido (set) com a chave-primária e com os atributos para alteração.

• Não retorna nenhum DTO pois não será acrescentada nenhuma nova informação aos atributos do DTO enviado.

alterar (objSerieDTO)

RN – AlterarRN – Alterar

SerieRN SerieBDconsultar (objSerieDTO)

objSerieDTO objSerieDTO

consultar (objSerieDTO)

• Envia-se um DTO com os atributos de retorno (ret) configurados e preenchido (set) com atributos que identifiquem uma determinada ocorrência (chave-primária ou chave-candidata).

• Se mais de uma ocorrência for selecionada será gerado um erro.

• É retornado um DTO com os valores dos atributos solicitados de acordo com os dados atualmente persistidos (get).

RN – ConsultarRN – Consultar

SerieRN SerieBDlistar (objSerieDTO)

arrObjSerieDTO arrObjSerieDTO

listar (objSerieDTO)

• Envia-se um DTO com os atributos de retorno (ret), pesquisa (set) e ordenação (setOrd) preenchidos.

• É retornado uma lista de DTOs com todos os registros que atenderam aos critérios de pesquisa e preenchido com os atributos solicitados (get). • O cruzamento entre tabelas somente será realizado se solicitado retorno ou filtro de um campo da tabela relacionada.

Observação: o método listar não atenderá a todos os casos possíveis. Para outras pesquisas que se façam necessárias deve criado um método Conectado com estrutura semelhante, ou seja, recebendo um DTO e retornando uma lista.

RN – ListarRN – Listar

SerieRN SerieBDcontar (objSerieDTO)

Número ocorrências Número ocorrências

contar (objSerieDTO)

• Envia-se um DTO com os atributos de pesquisa (set) preenchidos.

• É retornado o número de ocorrências que atenderam aos critérios de pesquisa.

RN – ContarRN – Contar

SerieRN SerieBDbloquear (objSerieDTO)

objSerieDTO objSerieDTO

bloquear (objSerieDTO)

• Envia-se um DTO preenchido (set) com o atributo chave-primária.

• É retornado um DTO com todos os atributos da ocorrência no banco (retTodos).

• O registro ficará em lock até o fim da transação corrente.

RN – BloquearRN – Bloquear

SerieRN

SerieBD

excluir (SerieDTO) excluir (arrObjSerieDTO)

• Envia-se uma lista de DTOs com os atributos correspondentes a chave-primária preenchidos (set).

• A passagem de uma lista permite que o mesmo método seja utilizado para exclusão de um único item ou para a exclusão múltipla de itens. • O método excluir da RN recebe uma coleção enquanto que o método excluir da BD recebe um DTO específico

RN – Excluir, Desativar e ReativarRN – Excluir, Desativar e Reativar

Conectado ou Controlado

InfraRN

RN1

RN – Escopo de ExecuçãoRN – Escopo de Execução

RN2

RNn

RN3

RN – ProjetoRN – Projeto Quando necessário criar para a funcionalidade um

método gerente na RN garantindo a execução em uma única conexão/transação

Quando necessário criar um DTO específico para a funcionalidade

Projetar os métodos da RN para atendam não só a interface mas também outros clientes como web-services

InfraIBanco

InfraIngres InfraSqlServer InfraPostgreSql

BancoX

InfraMySql

Banco de DadosBanco de Dados

Abstração do Banco de Dadosinterface InfraIBanco {

public function getIdBanco(); public function getIdConexao(); public function isBolProcessandoTransacao(); public function abrirConexao(); public function fecharConexao(); public function abrirTransacao(); public function confirmarTransacao(); public function cancelarTransacao(); public function consultarSql($strSql); public function executarSql($strSql); public function paginarSql($strSql,$numIni,$numQtd); public function limitarSql($strSql,$numQtd); public function formatarSelecaoDta | Dth | Str | Bol | Num | Din | Dbl | Bin public function formatarGravacaoDta | Dth | Str | Bol | Num | Din | Dbl | Bin public function formatarLeituraDta | Dth | Str | Bol | Num | Din | Dbl | Bin public function converterStr($strTabela,$strCampo); public function isBolForcarPesquisaCaseInsensitive(); public function formatarPesquisaStr($strTabela,$strCampo,$strValor,$strOperador,$bolCaseInsensitive);

}

InfraRN -> InfraIBancointerface InfraIBanco {

public function getIdBanco(); public function getIdConexao(); public function isBolProcessandoTransacao(); public function abrirConexao(); public function fecharConexao(); public function abrirTransacao(); public function confirmarTransacao(); public function cancelarTransacao(); public function consultarSql($strSql); public function executarSql($strSql); public function paginarSql($strSql,$numIni,$numQtd); public function limitarSql($strSql,$numQtd); public function formatarSelecaoDta | Dth | Str | Bol | Num | Din | Dbl | Bin public function formatarGravacaoDta | Dth | Str | Bol | Num | Din | Dbl | Bin public function formatarLeituraDta | Dth | Str | Bol | Num | Din | Dbl | Bin public function converterStr($strTabela,$strCampo); public function isBolForcarPesquisaCaseInsensitive(); public function formatarPesquisaStr($strTabela,$strCampo,$strValor,$strOperador,$bolCaseInsensitive);

}

SerieBD

Tabelaserie

DTOs DTOs

InfraRN

SerieRN

InfraBD

BD

DTOsMUMPS

Arquivo TXT

A classe BD isola a forma como os dados são acessados. Se hoje é acessado o banco SQL Server, amanhã os dados podem vir do MySQL, MUMPS ou até de um arquivo texto. A classe RN só sabe lidar com DTOs, como eles serão “traduzidos” é problema da BD.

Tabeladocumento

DTOs DocumentoRN

DocumentoRN001

DocumentoRN002

DocumentoRN003

DocumentoBD

BDBD

SerieBD

InfraBD

cadastrar(DTO)

Não existe cadastrar

abstract class InfraBD {

public function __construct($objInfraIBanco) public function cadastrar($objInfraDTO) ; public function excluir($objInfraDTO); public function consultar($objInfraDTO); public function desativar($objInfraDTO); public function reativar($objInfraDTO) ; public function alterar($objInfraDTO); public function listar($objInfraDTO) ; public function contar($objInfraDTO) ; public function bloquear($objInfraDTO) ;

. . . }

InfraBDInfraBD

InfraBD -> InfraIBancointerface InfraIBanco {

public function getIdBanco(); public function getIdConexao(); public function isBolProcessandoTransacao(); public function abrirConexao(); public function fecharConexao(); public function abrirTransacao(); public function confirmarTransacao(); public function cancelarTransacao(); public function consultarSql($strSql); public function executarSql($strSql); public function paginarSql($strSql,$numIni,$numQtd); public function limitarSql($strSql,$numQtd); public function formatarSelecaoDta | Dth | Str | Bol | Num | Din | Dbl | Bin public function formatarGravacaoDta | Dth | Str | Bol | Num | Din | Dbl | Bin public function formatarLeituraDta | Dth | Str | Bol | Num | Din | Dbl | Bin public function converterStr($strTabela,$strCampo); public function isBolForcarPesquisaCaseInsensitive(); public function formatarPesquisaStr($strTabela,$strCampo,$strValor,$strOperador,$bolCaseInsensitive);

}

InfraBD Traduz o DTO recebido para comandos SQL Traduz os retornos do banco de dados para DTOs Formatos:

Dta – dd/mm/aaaaDth – dd/mm/aaaa hh:mm:ssDin – 999.999,99Dbl – 999999,99

InfraBD

Se necessário implementar algo específico na BD:

formatarGravacaoDta | Dth | Str | Bol | Num | Din | Dbl | BinPara converter o formato para gravação no banco

formatarLeituraDta | Dth | Str | Bol | Num | Din | Dbl | BinPara converter o formato lido do banco

formatarSelecaoDta | Dth | Str | Bol | Num | Din | Dbl | BinUsado para informar ao banco como trazer o campo (cast)

SerieRN

SerieBD

xxxxx()

InfraException InfraException

protected function xxxxxControlado(...) { try { ... } catch (Exception $e) { throw new InfraException(“...”, $e); }}

TabelaSerie

<?try {

. . .

}catch(Exception $e){ PaginaSistema::getInstance()->processarExcecao($e);}

PaginaSistema::getInstance()->montarDocType();PaginaSistema::getInstance()->abrirHtml();...

formulario.phpSerieRN

SerieBD

InfraException InfraException

TabelaSerie

xxxxx()

Exceções

public function xxxxx(...) { try { ... } catch (Exception $e) { throw new InfraException(“...”, $e); }}

InfraException

Transporte de validações Transporte de erros

abstract class InfraException {

public function adicionarValidacao($strDescricao)public function lancarValidacoes()public function lancarValidacao($strDescricao)

}

InfraException (validações)

$objInfraException = new InfraException();

if (...1...){ $objInfraException->adicionarValidacao(‘v1’); } if (...2...){ $objInfraException->adicionarValidacao(‘v2’); } if (...3...){ $objInfraException->lancarValidacao(‘v3’); } if (...4...){ $objInfraException->adicionarValidacao(‘v4’); } $objInfraException->lancarValidacoes();

InfraException (validações)

InfraException InfraPagina->processarExcecao($e) InfraWS->processarExcecao($e)InfraAjax->processarExcecao($e)

serie_lista.php

controlador.phpDTOs SerieRN

serie_cadastro.php

browser

GrupoSerieINT GrupoSerieRN

Interface RN

DTOs

abstract class InfraPagina { public function montarDocType(); public function abrirHtml(...); public function abrirHead(...); public function montarTitle(...); public function montarMeta(); public function montarStyle(); public function abrirStyle(...); public function fecharStyle(...); public function montarJavaScript(...); public function abrirJavaScript(...); public function fecharJavaScript(..); public function fecharHead(...); public function montarBarraLocalizacao(...); public function montarBarraComandosSuperior(...); public function montarBarraComandosInferior(...); public function montarAreaValidacao(...); public function montarAreaDebug(...); public function abrirAreaDados(...); public function fecharAreaDados(...); public function abrirAreaTabela(...); public function fecharAreaTabela(...); public function fecharBody(...); public function fecharHtml(...);}

InfraPagina

InfraPagina

PaginaSistema

Pagina 1.php Pagina n.phpPagina 2.php

InfraPagina

try { SessaoSistema::getInstance()->validarLink(); SessaoSistema::getInstance()->validarPermissao($_GET['acao']);

switch($_GET['acao']){ case ‘serie_cadastrar': ... break;

case ‘serie_alterar': ... break;

case ‘serie_consultar': ... break;

default: throw new InfraException("Ação '".$_GET['acao']."' não reconhecida."); }

}catch(Exception $e){ PaginaSistema::getInstance()->processarExcecao($e);}PaginaSistema::getInstance()->montarDocType();PaginaSistema::getInstance()->abrirHtml();

...

PaginaSistema::getInstance()->fecharHtml();?>

serie_cadastro.php

try { SessaoSistema::getInstance()->validarLink(); SessaoSistema::getInstance()->validarPermissao($_GET['acao']); switch($_GET['acao']){ case 'serie_excluir': die;

case 'serie_desativar': die;

case 'serie_reativar': break;

case 'serie_selecionar': break;

case 'serie_listar': break;

default: throw new InfraException("Ação '".$_GET['acao']."' não reconhecida."); } ... Monta tabela usando SessaoSistema::getInstance()->verificarPermissao()...}catch(Exception $e){ PaginaSistema::getInstance()->processarExcecao($e);} PaginaSistema::getInstance()->montarDocType();PaginaSistema::getInstance()->abrirHtml();...PaginaSistema::getInstance()->fecharHtml();?>

serie_lista.php

public function permitirXHTML()Permite mudar o comportamento para todas as páginas

public function setBolXHTML($bolXHTML)Permite mudar o comportamento para uma página

public function formatarXHTML($str)Formata um valor para exibição

InfraPagina (XHTML)

InfraINT

Montagem de combos, listas, ... Formatação de campos Todo e qualquer código de interface

que possa ser compartilhado

serie_lista.php

controlador.php controlador_ajax.php

browser

GrupoSerieINT GrupoSerieRN

InfraINT

AjaxinfraAjaxAutoCompletar(hdnId, txtDesc, url)

infraAjaxMontarSelectDependente(selPai,selFilho,url)

infraAjaxMontarSelect(sel,url)

infraAjaxComplementar(obj, url)

infraAjaxMontarCheckboxGrupo(div,url)

infraCheckboxAdicionarItem(obj, text, value, name)

Classes Principais

InfraIBanco InfraPagina InfraSessao InfraConfiguracao

Classes Acessórias

InfraDebug InfraLog InfraCache InfraAgendamentoTarefa InfraAuditoria

InfraIBanco

InfraIngres InfraSqlServer InfraPostgreSql InfraMySql

Banco de DadosBanco de Dados

class BancoSistema extends InfraMySql {

private static $instance = null; public static function getInstance() { if (self::$instance == null) { self::$instance = new BancoSistema(); } return self::$instance; } public function getServidor() { return ‘bd.trf4.jus.br’; }

public function getPorta() { return ‘3306’; } public function getBanco() { return ‘nome_base’; } public function getUsuario(){ return ‘nome_usuario’; } public function getSenha(){ return ‘senha_usuario’; } }

class ConfiguracaoSistema extends InfraConfiguracao { private static $instance = null; public static function getInstance(){

if (self::$instance == null) { self::$instance = new ConfiguracaoSistema();

} return self::$instance; }

public function getArrConfiguracoes(){ return array(

. . . 'BancoSistema' => array('Servidor' => ‘bd.trf4.jus.br',

'Porta' => '3306', 'Banco' => ‘nome_base', 'Usuario' => ‘nome_usuario', 'Senha' => ‘senha_usuario'));

} }

class BancoSistema extends InfraMySql {

private static $instance = null; public static function getInstance() { if (self::$instance == null) { self::$instance = new BancoSistema(); } return self::$instance; } public function getServidor() { return ConfiguracaoSistema::getInstance()->getValor('BancoSistema','Servidor'); }

public function getPorta() { return ConfiguracaoSistema::getInstance()->getValor('BancoSistema','Porta'); } public function getBanco() { return ConfiguracaoSistema::getInstance()->getValor('BancoSistema','Banco'); } public function getUsuario(){ return ConfiguracaoSistema::getInstance()->getValor('BancoSistema','Usuario'); } public function getSenha(){ return ConfiguracaoSistema::getInstance()->getValor('BancoSistema','Senha'); } }

InfraPagina InfraPaginaEsquema InfraPaginaEsquema2

InterfaceInterface

PaginaSistema

InfraSessao

Links assinados Validação de permissão Auditoria Dados do usuário Atributos de Sessão

abstract class InfraSessao { . . . public function validarLink($strLink=null) public function assinarLink($strLink)

. . .}

InfraSessao (links assinados)InfraSessao (links assinados)

abstract class InfraSessao { . . . public function validarPermissao($strNomeRecurso) public function verificarPermissao($strNomeRecurso)

. . .}

InfraSessao (permissões)InfraSessao (permissões)

abstract class InfraSessao { . . . public function validarAuditarPermissao($strNomeRecurso, $strOperacao = null, $varParametro = null) . . .}

InfraSessao (auditoria)InfraSessao (auditoria)

abstract class InfraSessao { . . . public function getNumIdOrgaoUsuario() public function getStrSiglaOrgaoUsuario() public function getNumIdUsuario() public function getStrSiglaUsuario() public function getStrNomeUsuario() public function getNumIdOrgaoSistema() public function getNumIdSistema() public function getNumIdUnidadeAtual() public function getStrSiglaUnidadeAtual() . . .}

InfraSessao (dados do usuário)InfraSessao (dados do usuário)

abstract class InfraSessao { . . . public function setAtributo($strNome,$varValor) public function getAtributo($strNome) . . .}

InfraSessao (atributos de sessão)InfraSessao (atributos de sessão)

class SessaoSistema extends InfraSessao { private static $instance = null; public static function getInstance($bolHabilitada=true,$bolValidarLinks=true) { if (self::$instance == null) { self::$instance = new SessaoSistema($bolHabilitada,$bolValidarLinks); } return self::$instance; }

public function __construct($bolHabilitada,$bolValidarLinks){ parent::__construct($bolHabilitada,$bolValidarLinks); }

public function getStrSiglaOrgaoSistema(){return ConfiguracaoSistema::getInstance()->getValor('SessaoSistema','SiglaOrgaoSistema'); }

public function getStrSiglaSistema(){ return ConfiguracaoSistema::getInstance()->getValor('SessaoSistema','SiglaSistema'); }

public function getStrPaginaLogin(){ return ConfiguracaoSistema::getInstance()->getValor('SessaoSistema','PaginaLogin'); }

public function getStrSipWsdl(){ return ConfiguracaoSistema::getInstance()->getValor('SessaoSistema','SipWsdl'); }

public function inicializarSessao(){ } }

class InfraDebug { . . . public static function getInstance(); public function setBolLigado($bolLigado); public function setBolDebugInfra($bolDebugInfra); public function setBolEcho($bolEcho); public function gravar($str); public function getStrDebug(); public function limpar();}

InfraDebugInfraDebug

abstract class InfraLog { public function __construct($objInfraIBanco)... public function gravar($str)... }

CREATE TABLE infra_log ( id_infra_log integer not null, dth_log datetime not null, texto_log varchar(max) not null, ip varchar(15) not null );

InfraLogInfraLog

MódulosMódulos

É possível ter um controlador (de páginas, ajax e web-services) para cada módulo.

WSDL controlador_ws Classe WS

Web-ServicesWeb-Services

<?xml version="1.0" encoding="ISO-8859-1"?><wsdl:definitions name="PublicacaoWS" targetNamespace="SeiPublicacao" ...xmlns:tns="SeiPublicacao"> <wsdl:types> <xsd:schema targetNamespace="SeiPublicacao"> <xsd:complexType name="Publicacoes"> <xsd:all> <xsd:element name="IdVeiculoPublicacao" type="xsd:string"/> <xsd:element name="DataDisponibilizacao" type="xsd:string"/> <xsd:element name="DataPublicacao" type="xsd:string"/> <xsd:element name="Numero" type="xsd:string"/> <xsd:element name="IdDocumentos" type="xsd:string" minOccurs="1" maxOccurs="unbounded"/> </xsd:all> </xsd:complexType> </xsd:schema> </wsdl:types> <wsdl:message name="confirmarDisponibilizacaoRequest"> <wsdl:part name="Publicacoes" type="tns:Publicacoes" /> </wsdl:message> <wsdl:message name="confirmarDisponibilizacaoResponse"> <wsdl:part name="parametros" type="xsd:string" /> </wsdl:message> <wsdl:portType name="SeiPublicacaoPortType"> <wsdl:operation name="confirmarDisponibilizacao"> <wsdl:input message="tns:confirmarDisponibilizacaoRequest"/> <wsdl:output message="tns:confirmarDisponibilizacaoResponse"/> </wsdl:operation> </wsdl:portType> <wsdl:binding name="SeiPublicacaoBinding" type="tns:SeiPublicacaoPortType"> <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/> <wsdl:operation name="confirmarDisponibilizacao"> <soap:operation soapAction="SeiPublicacaoAction"/> <wsdl:input> <soap:body namespace="SeiPublicacao" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </wsdl:input> <wsdl:output> <soap:body namespace="SeiPublicacao" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </wsdl:output> </wsdl:operation> </wsdl:binding>

<wsdl:service name="SeiPublicacaoService"> <wsdl:port name="SeiPublicacaoPortService" binding="tns:SeiPublicacaoBinding"> <soap:address location="[servidor]/ws/PublicacaoWS.php"/> </wsdl:port> </wsdl:service></wsdl:definitions>

<?php require_once dirname(__FILE__).'/SEI.php'; $strArq = null;

switch ($_GET['servico']) {

case 'sei': $strArq .= 'ws/sei.wsdl'; break; case 'edoc': $strArq .= 'ws/edoc.wsdl'; break; case 'sip': $strArq .= 'ws/sei_sip.wsdl'; break;

case 'assinador': $strArq .= 'ws/assinador.wsdl'; break; case 'ouvidoria': $strArq .= 'ws/ouvidoria.wsdl'; break; case 'publicacao': $strArq = 'ws/publicacao.wsdl'; break; default: throw new Exception('Serviço ['.$_GET['servico'].'] inválido.'); }

header("Pragma: public"); header('Pragma: no-cache'); header("Expires: 0"); header("Cache-Control: no-cache, must-revalidate, post-check=0, pre-check=0"); header("Cache-Control: private","false"); header('Content-Disposition: inline; filename="' . $strArq . '"'); $handle = fopen($strArq, "r"); $strWsdl = fread($handle, filesize($strArq)); fclose($handle); echo str_replace('[servidor]', ConfiguracaoSEI::getInstance()->getValor('SEI','URL'), $strWsdl);?>

http://sistema.trf4.jus.br/controlador_ws.php?servico=publicacao

Web-ServicesWeb-Services

<?class PublicacaoWS extends InfraWS {

public function getObjInfraLog(){ return LogSEI::getInstance(); } public function confirmarDisponibilizacao($Publicacoes){ . . . }}

$servidorSoap = new SoapServer("publicacao.wsdl",array('encoding'=>'ISO-8859-1'));

$servidorSoap->setClass("PublicacaoWS");

if ($_SERVER['REQUEST_METHOD']=='POST') { $servidorSoap->handle();}?>

Web-ServicesWeb-Services

<?class PublicacaoWS extends InfraWS { ... public function confirmarDisponibilizacao($Publicacoes){ try { $this->validarAcessoAutorizado(ConfiguracaoSEI::getInstance()->getValor('HostWebService','Publicacao'));

InfraDebug::getInstance()->setBolLigado(false); InfraDebug::getInstance()->setBolDebugInfra(false); InfraDebug::getInstance()->limpar();

//montar DTO //chamar RN

//LogSEI::getInstance()->gravar(InfraDebug::getInstance()->getStrDebug()); return true;

}catch(Exception $e){ $this->processarExcecao($e); } } }}...?>

Web-ServicesWeb-Services

<?class PublicacaoWS extends InfraWS { ... public function confirmarDisponibilizacao($Publicacoes){ try { $this->validarAcessoAutorizado(ConfiguracaoSEI::getInstance()->getValor('HostWebService','Publicacao'));

InfraDebug::getInstance()->setBolLigado(false); InfraDebug::getInstance()->setBolDebugInfra(false); InfraDebug::getInstance()->limpar();

//montar DTO //chamar RN

//LogSEI::getInstance()->gravar(InfraDebug::getInstance()->getStrDebug()); return true;

}catch(Exception $e){ $this->processarExcecao($e); } } }}...?>

Web-ServicesWeb-Services

class PublicacaoWS extends InfraWS { public function confirmarDisponibilizacao($Publicacoes){ try { ... if ($Publicacoes->IdDocumentos != null && !is_array($Publicacoes->IdDocumentos)){ $Publicacoes->IdDocumentos = array($Publicacoes->IdDocumentos); }

$arrObjPublicacaoDTO = array(); foreach($Publicacoes->IdDocumentos as $idDocumento){ $objPublicacaoDTO = new PublicacaoDTO(); $objPublicacaoDTO->setDtaDisponibilizacao($Publicacoes->DataDisponibilizacao); $objPublicacaoDTO->setDblIdDocumento($idDocumento); $objPublicacaoDTO->setDtaPublicacao($Publicacoes->DataPublicacao); $objPublicacaoDTO->setNumNumero($Publicacoes->Numero); $arrObjPublicacaoDTO[] = $objPublicacaoDTO; }

$objVeiculoPublicacao = new VeiculoPublicacaoDTO(); $objVeiculoPublicacao->setArrObjPublicacaoDTO($arrObjPublicacaoDTO); $objVeiculoPublicacao->setNumIdVeiculoPublicacao($Publicacoes->IdVeiculoPublicacao);

$objPublicacaoRN = new PublicacaoRN(); $objPublicacaoRN->confirmarDisponibilizacaoRN1115($objVeiculoPublicacao);

...

}catch(Exception $e){ $this->processarExcecao($e); } }}

Web-ServicesWeb-Services

Sistema de Permissões Gerador de Código Sistema de Teste da InfraPHP

Outros SistemasOutros Sistemas

FIM!

Diretoria de Tecnologia da InformaçãoTribunal Regional Federal da 4ª Região

top related