Informações Principais
     Resumo
     Abstract
     Introdução
     Conclusão
     Download
  
  
  
 
Conclusão
 
 
Acadêmico(a): Samuel Yuri Deschamps
Título: Framework para Mapeamento Objeto-Relacional em Delphi
 
Conclusão:
Os resultados obtidos com o desenvolvimento do framework foram bons. Foi possível cumprir todos os requisitos propostos. Algumas técnicas como mapeamento de herança, associações, tipos anuláveis e carregamento tardio também foram implementadas com sucesso, sem que tivessem sido definidos como requisitos funcionais.
O objetivo principal do trabalho foi atendido, que era desenvolver um OPF em Delphi que utilize a técnica de ORM para fornecer a camada de persistência a uma aplicação. Acredita-se que esta camada de persistência seja eficiente e transparente. Os objetivos específicos do trabalho também foram atendidos com sucesso.
As ferramentas utilizadas foram adequadas para o desenvolvimento do trabalho. Os padrões de projeto utilizados também foram adequados e acredita-se que tornaram o código fonte do framework organizado e fácil de entender. Obteve-se produtividade com a exploração de recursos novos como tipos genéricos, a nova API do RTTI e Atributos Customizados, disponíveis na linguagem Delphi para Windows há menos de dois anos conforme Groves (2009). Tais recursos possibilitaram a construção de estruturas como Nullable e Proxy.
Vários tipos de aplicações podem utilizar este framework como camada de persistência, desde aplicações pequenas com banco de dados embarcado até sistemas maiores que rodam em arquitetura cliente-servidor. Porém, para ser considerado prático e eficiente na construção de grandes aplicações, são necessárias certas adaptações e extensões. O framework pode ser utilizado também para o desenvolvimento de middlewares para suportar arquiteturas mais elaboradas do que a cliente-servidor. Uma limitação é que a única plataforma suportada atualmente é Windows.
A proposta inicial deste trabalho previa resolver problemas de concorrência com outras instâncias da aplicação que interagem com o mesmo banco de dados. Porém, devido à grande complexidade dos controles de transações para tratar a concorrência, optou-se por não implementar este suporte neste trabalho. Em aplicações monousuário este problema simplesmente não existe. Em aplicações cliente-servidor de pequeno porte pode-se executar a interação com o gerenciador de objetos vinculada com uma transação do SGBD. Ou seja, inicia-se uma transação no banco, depois se realiza toda a lógica que envolve a persistência de uma só vez, depois se finaliza a transação. Desta forma, os objetos lidos ficarão bloqueados no banco enquanto a transação não for finalizada, impedindo modificações concorrentes. Esta técnica, porém, pode deixar o sistema travado se houverem muitas transações concorrentes, por isto não é indicada para sistemas de grande porte. Além disso, é possível resolver este problema como extensão, criando uma camada intermediária para tratar a concorrência.
Foi encontrada uma dificuldade ao implementar o padrão de projeto Lazy Load. Estimava-se utilizar técnicas de orientação a aspectos para aplicar este padrão, mas o Delphi não suporta atualmente os mecanismos necessários para tal. Elaborou-se então uma solução alternativa que se mostrou eficiente: a estrutura Proxy. O resultado esperado foi alcançado com sucesso.
Muitas funcionalidades do framework foram preparadas para serem estendidas, fazendo com que o projeto possa ser continuado, agregando mais funcionalidades com facilidade. Acredita-se que este trabalho contribua bastante para o desenvolvimento tecnológico, inovando em termos de persistência em Delphi para Windows. Algumas inovações são a utilização de anotações para mapeamento e a disponibilização de uma interface de persistência fortemente orientada a objetos. Com isto, abre-se um leque de possibilidades para futuros trabalhos.