arquitetura php mairon guerra bathaglini ([email protected])[email protected] diretoria de tecnologia da...

84
Arquitetura PHP Mairon Guerra Bathaglini ([email protected] ) Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

Upload: sophia-lobo-vilanova

Post on 07-Apr-2016

257 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

Arquitetura PHP

Mairon Guerra Bathaglini([email protected])

Diretoria de Tecnologia da Informação

Tribunal Regional Federal da 4ª Região

Page 2: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)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

Page 3: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

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

Page 4: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

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

Page 5: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

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

Page 6: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

Padrão de InterfacesPadrão de Interfaces

Page 7: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

Casos de Uso e Regras de Negócio e Interface

Page 8: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

Cliente

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

RN BD Cliente

Arquitetura n CamadasArquitetura n Camadas

DTOs DTOs

Page 9: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

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

Page 10: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

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

Page 11: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

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

Page 12: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

adicionarAtributo adicionarAtributoTabela adicionarAtributoTabelaRelacionada

configurarPK configurarFK

InfraDTOInfraDTO

Page 13: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

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

Page 14: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

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

Page 15: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

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

InfraDTOInfraDTO

Page 16: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

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

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

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

InfraDTOInfraDTO

Page 17: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

configurarFKconfigurarFK($strAtributo, $strTabelaRelacionada,

$strCampoRelacionado, $numTipoFK, $numFiltroFK)

$TIPO_FK_OBRIGATORIA (default) $TIPO_FK_OPCIONAL

$FILTRO_FK_ON (default) $FILTRO_FK_WHERE

InfraDTOInfraDTO

Page 18: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

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

Page 19: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

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

Page 20: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

SerieBD

Tabeladocumento

DTOs DTOs

InfraRN

SerieRN

InfraBD

RNRN

Page 21: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

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;

Page 22: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

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)

Page 23: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

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

Page 24: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

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

Controlado Conectado

Page 25: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

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

Page 26: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

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

Page 27: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

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

Page 28: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

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

Page 29: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

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

Page 30: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

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

Page 31: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

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

Page 32: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

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

Page 33: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

Conectado ou Controlado

InfraRN

RN1

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

RN2

RNn

RN3

Page 34: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

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

Page 35: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

InfraIBanco

InfraIngres InfraSqlServer InfraPostgreSql

BancoX

InfraMySql

Banco de DadosBanco de Dados

Page 36: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

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);

}

Page 37: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

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);

}

Page 38: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

SerieBD

Tabelaserie

DTOs DTOs

InfraRN

SerieRN

InfraBD

BD

Page 39: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

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

Page 40: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

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

Page 41: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

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);

}

Page 42: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

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

Page 43: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

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)

Page 44: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

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); }}

Page 45: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

InfraException

Transporte de validações Transporte de erros

Page 46: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

abstract class InfraException {

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

}

InfraException (validações)

Page 47: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

$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)

Page 48: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

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

Page 49: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

serie_lista.php

controlador.phpDTOs SerieRN

serie_cadastro.php

browser

GrupoSerieINT GrupoSerieRN

Interface RN

DTOs

Page 50: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

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

Page 51: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

InfraPagina

PaginaSistema

Pagina 1.php Pagina n.phpPagina 2.php

InfraPagina

Page 52: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

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

Page 53: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

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

Page 54: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

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)

Page 55: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

InfraINT

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

que possa ser compartilhado

Page 56: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

serie_lista.php

controlador.php controlador_ajax.php

browser

GrupoSerieINT GrupoSerieRN

InfraINT

Page 57: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

AjaxinfraAjaxAutoCompletar(hdnId, txtDesc, url)

infraAjaxMontarSelectDependente(selPai,selFilho,url)

infraAjaxMontarSelect(sel,url)

infraAjaxComplementar(obj, url)

infraAjaxMontarCheckboxGrupo(div,url)

infraCheckboxAdicionarItem(obj, text, value, name)

Page 58: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

Classes Principais

InfraIBanco InfraPagina InfraSessao InfraConfiguracao

Page 59: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

Classes Acessórias

InfraDebug InfraLog InfraCache InfraAgendamentoTarefa InfraAuditoria

Page 60: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

InfraIBanco

InfraIngres InfraSqlServer InfraPostgreSql InfraMySql

Banco de DadosBanco de Dados

Page 61: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

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’; } }

Page 62: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

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'));

} }

Page 63: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

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'); } }

Page 64: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

InfraPagina InfraPaginaEsquema InfraPaginaEsquema2

InterfaceInterface

PaginaSistema

Page 65: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

InfraSessao

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

Page 66: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

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

. . .}

InfraSessao (links assinados)InfraSessao (links assinados)

Page 67: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

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

. . .}

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

Page 68: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

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

InfraSessao (auditoria)InfraSessao (auditoria)

Page 69: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

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)

Page 70: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

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

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

Page 71: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Regiã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(){ } }

Page 72: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

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

Page 73: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

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

Page 74: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

MódulosMódulos

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

Page 75: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

WSDL controlador_ws Classe WS

Web-ServicesWeb-Services

Page 76: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

<?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>

Page 77: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

<?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);?>

Page 78: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

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

Web-ServicesWeb-Services

Page 79: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

<?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

Page 80: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

<?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

Page 81: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

<?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

Page 82: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

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

Page 83: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

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

Outros SistemasOutros Sistemas

Page 84: Arquitetura PHP Mairon Guerra Bathaglini (mga@trf4.jus.br)mga@trf4.jus.br Diretoria de Tecnologia da Informação Tribunal Regional Federal da 4ª Região

FIM!

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