Padrões Estruturais para Mapeamento Objeto-Relacional

17/05/2010 at 11:14 Deixe um comentário

O livro “Padrões de Arquitetura de Soluções Corporativas”, de Martin Fowler, é uma referencia para padrões de projetos aplicados em vários tipos de soluções corporativos. Neste livro temos uma descrição detalhado de padrões utilizados para projetar classes de modo que facilite o mapeamento objeto-relacional.

O mapeamento objeto-relacional é uma abordagem utilizada para persistir informações de objetos de negócio em um banco de dados relacional. Os bancos de dados orientados a objeto ainda não se mostraram viáveis e, por esse motivo, não conseguiram conquistar o mercado corporativo. E para resolver o problema de converter um modelo orientado a objetos em um modelo relacional, utilizamos frameworks que implementam o mapeamento objeto-relacional como NHibernate e Entity Framework.

Para viabilizar a conversão do mundo orientado a objetos para o relacional, é importante seguirmos algumas convenções, e o livro do Fowler traz exemplos de diversos padrões que podem ser utilizados para auxiliar nesta empreitada.

Vou detalhar um conjunto em particular desses padrões, chamados de estruturais e tem esse nome devido ao fato de orientarem a construção das classes.

Segue abaixo a lista dos padrões estruturais:

Identity Field

Os bancos de dados relacionais identificam as linhas de uma tabela através de uma chave primária. Essa chave evita que sejam incluídas linhas duplicadas na base de dados e permitem a recuperação apenas da linha correspondente à chave. Como os objetos não tem esse conceito, precisaremos elencar uma propriedade que represente a chave primária. Podemos utilizar o seguinte padrão para resolver esse problema:

Se a chave da base de dados for um campo simples podemos representar o id como um tipo numérico, se for uma chave composta o id pode ser um objeto de uma classe.

Foreign Key Mapping

Outra questão importante é o relacionamento entre os objetos, no modelo relacional esse problema é resolvido através das chaves estrangeiras. Quando temos um relacionamento simples entre duas tabelas, uma das tabelas exporta a sua chaves primária para a outra tabela. No modelo orientado a objetos, um objeto é relacionado diretamento com outro através de uma referência. O padrão Foreign Key Mapping permite mapear essa referência para sua respectiva chave estrangeira na base de dados quando temos um relacionamento de n-para-um ou um-para-um:

Association Table Mapping

Quando temos um objeto que contêm um coleção de objetos de outra classe, o padrão anterior acaba quebrando a 3a. forma normal. Para resolver esse problema é criado no modelo de dados uma tabela intermediária que representa o relacionamento um-para-vários ou vários-para-vários. Esse padrão é chamado de Association Table Mapping:

Embedded Value

Objetos de valor não tem uma identidade única e não conseguimos representá-los no modelo de dados utilizando o padrão Identiy Field. Neste caso, a tabela que referencia esse objeto de valor vai incorporar os atributos desse tipo de objeto.

Single Table Inheritance

Um conceito amplamento utilizado em orientação a objetos e que não temos no modelo relacional, é a herança. Existem vários modos de representá-la no modelo de dados, e um dos mais simples é utilizar o padrão Single Table Inheritance. Esse padrão representa a classe pai e todas as sua filhas como uma tabela única.

Class Table Inheritance

Outro modo de representar os relacionamentos de herança é utilizar o padrão Class Table Inheritance. Neste padrão representamos a classe pai e as classes filhas como tabelas individuais. Para simular uma estrutura de herança, a tabela que representa a classe pai exporta a sua chave primária para as tabelas “filhas”.

Concrete Table Inheritance

O terceiro modo de representar a estrutura de herança é o padrão Concrete Table Inheritance. Neste padrão criamos tabelas apenas para as classes filhas, estas tabelas vão conter também todos os atributos da classe pai.

Martin Fowler também cita outros três padrões no seu livro (Dependent Mapping, Serialized LOB e Inheritance Mappers) e padrões comportamentais e para representar metadados no mapeamento objeto-relacional. Para obter mais informações consulte o catalogo de padrões para soluções corporativas: http://martinfowler.com/eaaCatalog/

Fonte: MartinFowler.com

[]’s
Eduardo Ernandes da Silva
Arquiteto de Sistemas

Anúncios

Entry filed under: Arquitetura de software, Design Pattern. Tags: , , , , .

Camadas de aplicação e domínio no DDD Guia de arquitetura n-camadas DDD .NET 4

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

Trackback this post  |  Subscribe to the comments via RSS Feed


Arquivos

Feeds

Calendário

maio 2010
D S T Q Q S S
« abr   jun »
 1
2345678
9101112131415
16171819202122
23242526272829
3031  

%d blogueiros gostam disto: