Veremos neste artigo como funciona e como utilizar o framework de Mapeamento Objeto-Relacional TMS Aurelius, que permite lidar com bancos de dados aproveitando os recursos da orientação a objetos.
Historicamente, o Delphi sempre foi reconhecido por sua excelência RAD, com componentes visuais prontos para uso, no mais tradicional arrastar-e-soltar. Aliado a isso também é reconhecido pela facilidade com que provê a construção de aplicações de banco de dados. Neste cenário, o uso de DataSets e controles data-aware (os famosos controles “DB” – DBEdit, DBGrid e cia) se combina a uma programação estruturada bastante eficiente por meio de procedures e functions. Até este ponto, todos os recursos necessários são basicamente nativos, providos pela própria ferramenta, numa instalação comum. Todavia, no cotidiano, este contexto pode seguir por outros direcionamentos, tal qual é o caso da POO (Programação Orientada a Objetos).
A Programação Orientada a Objetos acaba por definir outro conceito de desenvolvimento, agora baseado em objetos relacionados ao mundo real. Passando isso para o contexto das aplicações de banco de dados faz com que não se tenha mais simples DataSets manipulando instruções SQL a serem enviadas ao banco de dados, mas sim a manipulação de efetivos objetos de negócio. Tendo em vista esta abordagem, a estrutura provida pela aplicação, agora baseada em objetos, acaba por se tornar incompatível com a própria estrutura relacional do banco de dados. Visando superar este tipo de barreira é que surgem os frameworks ORM (Object-Relational Mapping, ou Mapeamento Objeto-Relacional, em português).
Em termos práticos, o que um framework ORM faz é interpretar os dados envolvidos, transformando então objetos de negócio em dados relacionais, bem como o caminho inverso, onde as informações provindas de uma base de dados dão origem a estes objetos. Durante esta jornada, as instruções SQL envolvidas acabam sendo suprimidas de qualquer contato direto com o desenvolvedor, dando origem a métodos concretos que, no final das contas, simplificam todo o processo de codificação.
Dito isto, este artigo transpõe então todo este cenário ao contexto do Delphi, por meio da apresentação de uma solução bastante eficaz e condizente com toda a praticidade e facilidade já conhecidos do IDE.
TMS Aurelius
O TMS Aurelius, ou simplesmente Aurelius, é um framework ORM exclusivo para Delphi, produzido pela empresa TMS Software. Sua distribuição se dá de forma comercial, ou seja, há a necessidade da aquisição de uma licença para o seu uso em produção, porém o framework desfruta de uma série de fatores e recursos que justificam a sua compra e plena utilização.
Licença
Em suma, o Aurelius é oferecido em três opções, que se diferenciam basicamente pela quantidade de usuários em uso:
- Single Developer License: habilita a utilização para um único usuário (desenvolvedor);
- Small Team: habilita a utilização para uma equipe pequena de até dois desenvolvedores;
- Site License: habilita a utilização para um número irrestrito de usuários na empresa relacionada;
Para fins de testes e conhecimento, o framework dispõe de um período de avaliação (Trial), suficiente para comprovar toda a sua eficiência no que ele se propõe a fazer.
Versões suportadas do Delphi
Uma tendência bastante positiva do Aurelius é o seu suporte atualizado às mais recentes versões do Delphi, o que significa dizer que muito provavelmente você terá uma nova versão disponível sempre que um novo release do IDE for lançado. De forma oficial, o suporte do framework se inicia no Delphi 2010, passando pela família XE (XE, XE2, XE3, etc.), Delphi 10 Seattle, até o recente Delphi 10.1 Berlin (até o momento da escrita deste artigo).
Componentes
Um cenário bastante comum no contexto Delphi é a aquisição de uma biblioteca de componentes que, uma vez instalada, disponibiliza na Tool Palette do IDE uma série de elementos prontos para uso pelo simples arrastar-e-soltar em um Form ou Data Module. Com o TMS Aurelius isso foge um pouco do tradicional, uma vez que sua instalação provê apenas um único elemento na paleta de componentes do Delphi (Figura 1). Isto porque, toda sua essência se dá por meio de sua estrutura de classes e interfaces provenientes de seu framework. Assim como veremos mais adiante, o uso do Aurelius em uma aplicação Delphi se dá essencialmente por meio de código, o que torna o processo bastante intuitivo com o passar do tempo.
Por que utilizar o TMS Aurelius?
As razões para se utilizar o Aurelius podem ser inúmeras e variáveis, tudo irá depender do contexto ao qual estará inserido. Falando de forma mais abrangente, o framework em si se baseia em três pilares que estabelecem os principais benefícios que uma aplicação irá obter com o seu uso: produtividade, manutenibilidade e portabilidade.
Ganho em produtividade
O termo produtividade diz respeito à forma simples com que o Aurelius lida com a manipulação de dados. Neste aspecto, toda a codificação da aplicação será voltada diretamente a objetos, e não mais a instruções SQL. De forma ilustrativa, na Listagem 1 é exibido um trecho de código tradicional, utilizando FireDAC para a seleção de um determinado registro da tabela CUSTOMER do banco Employee do Firebird. Na mesma medida, na sequência é exibido como ficaria esta mesma instrução utilizando-se o Aurelius.
Listagem 1. Trecho tradicional utilizando FireDAC
// forma tradicional FDQuery1.SQL.Clear;
FDQuery1.SQL.Add('select CUST_NO, CUSTOMER, PHONE_NO, CITY, STATE_PROVINCE,
COUNTRY from CUSTOMER where CUST_NO = :CUST_NO');
FDQuery1.ParamByName('CUST_NO').AsInteger := 1001;
FDQuery1.Open;
...