Pesquisa personalizada

2004/11/08

PLAMTAX

O Projeto

No início de setembro fui contratado pela CPD Informática para trabalhar como consultor no CCA-BR - Centro de Computação da Aeronáutica do Brasil. Desde o início trabalhei em conjunto com o Francisco Freire, profissional que destaca por sua competência. O projeto que estamos desenvolvendo chama-se PLAMTAX - PLANO DE MISSÕES TÉCNICO-ADMINISTRATIVAS NO EXTERIOR - e visa o planejamento e controle orçamentário de missões no exterior.

Ao chegar fomos informados que o projeto era para ser desenvolvido com as seguintes tecnologias:

  • Oracle
  • Delphi
  • MTS/COM+
  • ASP

Parte do sistema já estava desenvolvida e era necessário o desenvolvimento de 15 novos casos de uso. Por se tratar de sistema já existente, resolvemos, eu e o Francisco, estudar o que já havia sido feito com o objetivo de averiguarmos a possibilidade de aproveitar o modelo de programação que foi desenvolvido.

Refazer

Após duas semanas de estudo, eu e o Francisco, chegamos a conclusão que a arquitetura original do projeto não estava sendo atendida. Pois, originalmente havia sido pensado que a camada servidora seria desenvolvida em Delphi, o MTS cuidaria das transações e a camada de apresentação não interagiria com o banco de dados, somente com a camada servidora, que o paradigma da orientação a objeto seria usado e que haveria uma clara distinção entre camada de apresentação, regra de negócio e persistência.

De fato, muito pouco do que foi idealizado, havia sido feito:

  • Não havia separação entre a camada de persistência e as demais camadas;
  • os componentes MTS não estavam funcionando;
  • as transações não estavam sendo controladas nem pelo MTS, nem pela aplicação;
  • não havia sido adotado bons princípios de codificação, ocorrendo que logo que a aplicação servidora era iniciada e alocava algum recurso qualquer do sistema, em geral, esse recurso permanecia alocado, o que ocasionava em pouco tempo o travamento do servidor e outros problemas mais;
  • o sistema não era escalonável;
  • não foi utilizado apropriadamente o paradigma da orientação a objetos.

Como consequência verificamos que seria necessário:

  • separar a camada de persistência das demais;
  • começar o desenvolvimento dos novos casos a partir do ponto zero, ou seja, não aproveitariámos nada do que já havia sido desenvolvido. Creio que esta decisão não poderia ser diferente dado ao que tinhamos em mão;
  • simplificar e estruturar a camada de apresentação;
  • levar o controle das transações para o MTS/COM+
  • utilizar os recursos de cache e poolling do MTS/COM+
  • racionar recursos de banco.

Solução

Fomos surpreendidos ao verificar a quase inexistência de tecnologias de persistência e mapeamento objeto-relacional para Delphi. De fato encontramos somente duas opções para este proposito, o Depo e o tiOPF. Após fazermos algum teste e estudo, concluímos que não seria viável adotá-las.

Optamos por criar nossa própria solucação para o mapeamento e persistência objeto/relacional. Nós baseamos em parte no bom Hibernate. Desenvolvemos uma linguagem de consulta a objetos e outra para atualização, são elas:

  • OQL - Object Query Language
  • OML - Object Manipulation Language

Apesar de tentarmos deixá-la simples devido a limitações de tempo e orçamento, a linguagem suporta diversos tipos de expressões e ficou bem fléxivel. Alguns recursos como retorno de mais de uma coluna e agregação, não foram implementados. No entanto, creio ser fácil fazê-lo.

A maior dificuldade que tive foi em criar o analisador sintático/semântico e o gerador de SQL/DML. Sem dúvida este foi um desafio, dado que desconhecia completamente a tecnologia envolvida na criação de compiladores. Ao todo li muitos artigos na Internet, estudei alguns exemplos simples (e outros nem tanto), li um livro inteiro e usei mais dois para referência. Sendo que destes recomendo:

Price, Ana M. A.; Toscani, Simão T. Implementação de Linguagens de Programação: Compiladores. Porto Alegre: Instituto de Informática da UFRGS: Sagra Luzzatto, 2001.
Louden, Kenneth C. Louden. Compiladores Princípios e Práticas. São Paulo: Pioneira Thomson Learning, 2004.

O compilador implementado baseado no modelo recursivo descendente. No total levei três semanas para terminá-lo. Após entender a lógica do analisador, ficou natural usá-la para gerar a SQL/DML de forma automática. Porém, não houve muitas otimizações na SQL gerada. No entanto, ficamos satisfeitos com o resultado.

Uma visão da arquitetura adotada no sistema pode ser vista abaixo.

No momento, a camada de persistência está dependente da ADO e acumulou algumas particularidades do PLAMTAX. Caso eu venha a desenvolver algum sistema em Delphi e seja possível usar arquitetura semelhante a do PLAMTAX, espero poder melhorá-la. Tenho algumas idéias que poderiam torná-la um bom produto. Não penso em comercializá-la. Se fizer algo será free.

De qualquer forma, penso em trabalhar um pouco nela para poder abrí-la a quem puder interessar. Se houver disponibilidade de tempo irei publicá-la no sourceforge.net.

Conclusão

Deveremos terminar o projeto até o fim deste mês, novembro de 2004. Infelizmente dos quize casos requeridos, somente um será entregue para produção. Ainda falta gerar a documentação do sistema, tarefa que não me caberá, pois somente documentarei o código.

Com a total independência entre camadas, creio que o PLAMTAX se tornou um dos melhores sistemas que eu já tenha participado do desenvolvimento. Parte do sucesso se deve aos responsáveis pela arquitetura e projeto. Agradeço a todos pela tolerância, colaboração, presteza e empenho que foi dado ao projeto durante todo o tempo que participei dele. Após conhecer o Coronel Correia, Major Amilton e Capitão Marques fiquei orgulhoso do CCA-BR.

Agradeço a todos os demais que participaram do projeto, especialmente Francisco Freire, que foi crucial para o desenvolvimento da regra de negócios e em muitos momentos do desenvolvimento.

Labels:

0 Comments:

Post a Comment

<< Home