EntityDAC: Ferramenta de Mapeamento Objeto-Relacional – Parte Final
Artigo no estilo: Curso
O Mapeamento Objeto-Relacional é uma técnica tida como fundamental no desenvolvimento Orientado a Objetos de aplicações de banco de dados. Sua finalidade principal é reduzir toda a impedância resultante do uso da POO com bancos de dados relacionais, possibilitando, por exemplo, que uma tabela tenha sua representação na aplicação na forma de um elemento da programação, tal qual uma classe.
Em vista disso, diversas ferramentas são disponibilizadas no mercado com o intuito de facilitar o uso desta técnica, automatizando pontos das ações práticas necessárias. Dentre elas está o recém-lançado EntityDAC, da empresa Devart, voltado exclusivamente ao contexto Delphi e cuja intenção principal é tornar este tipo de abordagem facilitada o bastante a ponto de incentivar seu uso por desenvolvedores de todos os níveis.
O desenvolvimento de aplicações de banco de dados pode ser considerado uma das abordagens mais tradicionais no contexto Delphi. Logo, toda sua prática e conjuntura se apresentam de uma forma bastante natural junto à comunidade, por meio de uma abordagem baseada no desenvolvimento estruturado, adicionado de aspectos orientado a objetos.
Em complemento a este cenário, está o desenvolvimento puramente orientado a objetos, em que todo o contexto de negócio e programação está baseado nos conceitos de classes e objetos.
Devido à extensão do assunto, todo o contexto será dividido em duas partes. Nesta primeira será realizada toda a conceituação inicial pertinente, suficiente para a devida iniciação prática neste que pode ser considerado um novo cenário de desenvolvimento de aplicações Delphi.
Conceitos Iniciais
Banco de Dados
Conceitualmente, o termo banco de dados (ou base de dados) é utilizado para se designar uma estrutura especial, refletida numa coleção organizada de informações, as quais são tratadas como dados, em meio ao desenvolvimento de software. Todas as tratativas, incluindo a efetiva operação de toda esta estrutura, ficam a cargo de um software também tido como especial, denominado Sistema de Gerenciamento de Banco de Dados, ou simplesmente SGBD.
Seguindo por esta linha a forma com que as informações são tratadas e armazenadas na estrutura acabam por determinar tipos diferentes de bancos de dados. Tomando partido do cenário recente do desenvolvimento de software, dois tipos acabam por se destacar: relacional e orientado a objetos.
De forma sucinta um banco de dados relacional armazena seus dados na forma de tabelas enquanto que um banco de dados orientado a objetos mantêm suas informações na forma de objetos. Em se tratando do desenvolvimento Delphi, os bancos de dados relacionais são os que se mostram presentes em grande parte das aplicações que envolvem dados.
Sem deixar de citar, Oracle, MS SQL Server, InterBase e Firebird são alguns exemplos de bancos relacionais, enquanto que Cache e db4o são exemplos de bancos OO (Orientado a Objetos).
Impedância
Em meio ao cenário recente de software, é correto afirmar que grande parte das informações que transitam por aplicações são mantidas em bancos de dados. Assim como no Delphi, outras linguagens e tecnologias também têm nos bancos de dados relacionais sua principal opção de armazenamento na construção de aplicações que envolvam dados.
Logo, numa abordagem primada pelo uso da POO (Programação Orientada a Objetos), o uso de objetos de negócio (ver BOX 1), que transitam pela aplicação em substituição aos dados singulares de aplicações construídas a partir de uma abordagem “não-OO”, faz com que surjam determinadas exigências naturais.
A principal delas se dá pelo uso de um banco de dados condizente ao modelo de programação, tal como um banco de dados orientado a objetos. Em vista disso, nestes casos, o uso de um banco de dados relacional faz com que uma impedância genuína venha à tona, formalizando o seguinte questionamento: “Como salvar os objetos da aplicação nas tabelas do banco de dados?”.
Objetos de negócio ou entidades de negócio são classes que armazenam valores e os expõe através de propriedades. Eles contêm e gerenciam dados do negócio utilizado por um aplicativo, provendo acesso a esses dados e funcionalidades relacionadas. Entidades de negócio também podem validar os dados contidos nelas e até mesmo encapsular regras para assegurar consistência e integridade quanto às regras e comportamento do negócio envolvido.
Além do mais que, modelas e escolher entidades de negócio apropriadas é extremamente importante em um sistema orientado a objetos, compondo sua camada de negócios ou domínio. A Figura 1 exibe as possíveis camadas que um software orientado a objetos pode possuir.
Figura 1. Camadas de um software Orientado a Objetos
Por exemplo, uma das principais diferenças entre classes e dados relacionais é o conceito de unicidade. Em um banco relacional essa unicidade é garantida através de uma chave primária, mas objetos não possuem e não conhecem a definição de chave primária, eles são únicos por seu endereçamento de memória. Contudo, para minimizar esse disparate algumas técnicas são empregadas, como a técnica dos OIDs.
Temos que manter um paralelo em alguns aspectos aos bancos de dados relacionais, a exemplo disso temos os OIDs, que são identificadores de objetos.
Como nossos objetos serão salvos em um banco relacional devemos disponibilizar uma forma ...