Por que eu devo ler este artigo:A diferença entre o modelo utilizado pelos bancos de dados relacionais e a programação orientada a objetos faz com que tenhamos alguns problemas na hora de fazer essa conexão entre os dois. Por isso existe o Mapeamento Objeto-Relacional, ou ORM (Object-Relational Mapping), auxiliando nessa ligação entre os dois. Dentro desse contexto, o NHibernate é uma das principais ferramentas ORM do mercado .NET e, ao longo desse artigo, vamos descobrir como ele funciona e como podemos realizar o chamado mapeamento fluente com o projeto Fluent Nhibernate, contornando essa divergência entre o modelo OO e o modelo relacional dos bancos de dados, aproveitando o melhor dos dois lados.

O Mapeamento Objeto-Relacional é um dos tópicos mais em evidência na Tecnologia da Informação atualmente. Isso ocorre porque as linguagens de programação Orientadas a Objetos são as mais utilizadas, e as aplicações precisam dos Bancos de Dados Relacionais para armazenamento de dados. Essa diferença de paradigma leva a problemas que precisam ser contornados pela aplicação, e uma das formas de evitá-los é o ORM.

O NHibernate, por sua vez, é um dos ORMs mais antigos do mercado de desenvolvimento .NET. Hoje em dia, porém, há outras opções, como o LINQ to SQL e Entity Framework, que fazem essa ponte entre o modelo relacional e o orientado a objetos. Então, porque utilizar o NHibernate? Veremos algumas vantagens da utilização do NHibernate ao longo do artigo, mas na realidade é uma questão de escolha. O NHibernate se destaca devido aos seus muitos recursos, sem contar os projetos paralelos que visam auxiliar o NHibernate principal. Além disso, ele foi concebido de forma a permitir adaptações de acordo com a necessidade do usuário: se não estivermos satisfeitos com o tipo de mapeamento disponível, por exemplo, é possível a criação de outro, entre outras possibilidades.

É nesse contexto que o Fluent NHibernate se encaixa – o NHibernate original não permite o mapeamento fluente, apenas por XML. É por isso que o Fluent é uma ferramenta tão interessante, que está com seu uso em disseminação, atualmente. A ideia é que se abstraia o mapeamento via XML, muito trabalhoso, e isso seja feito via código, com a utilização de métodos. Ao longo desse artigo, vamos trazer em profundidade o funcionamento do Fluent NHibernate, juntamente com as possibilidades que essa ferramenta nos traz.

Mapeamento Objeto-Relacional

Praticamente todas as aplicações criadas e utilizadas atualmente possuem alguma interação com dados, e isso significa, normalmente, bancos de dados relacionais. A grande sacada desse tipo de mapeamento é trazer as tabelas das bases de dados para a realidade do desenvolvimento Orientado a Objetos (OO), transformando em classes do domínio da aplicação. Esse tipo de atitude facilita muito o desenvolvimento quando estamos lidando com os dados.

Mas, afinal, como o Mapeamento Objeto-Relacional funciona? Primeiramente, precisamos entender quais os problemas que os diferentes paradigmas (OO e Relacional) podem nos trazer:

  1. Granularidade: Nem sempre o modelo de negócios da aplicação será exatamente igual às tabelas da base de dados; normalmente, a aplicação traz mais classes do que há tabelas na base;
  2. Unicidade: Nos bancos de dados relacionais, a chave primária garante a unicidade dos dados, sendo que não há um equivalente para objetos em OO;
  3. Herança e Polimorfismo: Um dos principais conceitos de OO, não está presente nos bancos de dados relacionais (embora alguns deles definam sub e supertipos (BOX 1));
  4. Busca aos dados: A navegação entre os dados dentro da aplicação .NET pode ser comparada a uma rede de computadores: um objeto leva a outro. Nos bancos de dados relacionais, esse tipo de funcionamento não ocorre, preferindo trazer todos os dados de uma vez através de cláusulas JOIN ou similares, minimizando o número de acessos à base;
  5. Associações: As associações entre classes em OO são referências unidirecionais, enquanto nos bancos de dados relacionais temos a noção de chave estrangeira;
Nota: Sub e Supertipos em bancos de dados

Alguns bancos de dados trazem o conceito de subtipos e supertipos, que formam uma espécie de herança dentro dos bancos de dados relacionais. A ideia é que duas entidades tenham uma certa hierarquia, e esse conceito permite o compartilhamento de campos entre duas ou mais tabelas. Em outras palavras, subtipos e supertipos são simplesmente sobre generalização e especialização das tabelas do banco.

A partir desses conceitos, é possível entendermos como o Mapeamento Objeto-Relacional ...

Fim do trecho gratuito • continue abaixo
CONTEÚDO EXCLUSIVO

Desbloqueie toda a DevMedia

  • +2000 artigos e vídeos
  • +40 trilhas sobre Front-end, Back-end, IA e muito mais
  • +5000 exercícios práticos
  • Mentorias ao vivo individuais
até 50% OFF
A partir de
R$ 69 /mês
Assinar agora