Padrão de Projetos - Padrão Identity Field


Você já ouviu valor no padrão Identity Field ?

O padrão Identity Field é muito usando na implementação de um ORM (Object Relational Mapping) como o ActiveRecord, o Entity Framework, NHibernate, etc.

A implementação deste padrão salva a coluna identidade e chave primária de um banco de dados como um campo de um objeto, para transportar a identidade entre os objetos em memória e a linha do banco de dados. O padrão é usado para vincular a representação relacional com a representação orientada a objetos dos dados.

O transporte da identidade a partir do banco de dados para o modelo de objetos é assegurado por um Identity Map que impede que dois objetos iguais sejam reconstituídos.

Vejamos o que diz Martin Fowler:

"Saves a database ID field in an object to maintain identity between an in-memory object and a database row." (http://martinfowler.com/eaaCatalog/identityField.html)

A seguir uma tradução livre do texto logo abaixo a essa definição:

"A chave primária é usada nos bancos de dados para identificar uma linha de forma única. Porém objetos em memória não precisa de uma chave primária pois o sistema de objetos garante a identidade. Ler os dados de um banco de dados é simples, mas quando você tem que persistir as informações você precisa sincronizar os objetos em memória com o banco de dados."

"Usar o padrão Identity Field é bem simples basta você armazenar a chave primária da tabela do banco de dados em campos do objeto."

Então a ideia básica é salvar a chave primária do banco de dados no objeto e fornecer um mecanismo de pesquisa para que você possa encontrar um objeto quando você conhecer sua chave. Assim, cada objeto na memória precisa de um campo (geralmente chamado "ID") que trata o ID do banco de dados.

O padrão Identity Field utiliza uma propriedade que atua como chave de identificação para cada entidade. O objetivo é ser um identificador global que contenha uma identificação única que permita diferenciar as entidades na memória.

Eu já publiquei alguns artigos sobre o identificador global único - GUID (veja as referências)

GUID significa - Globally Unique Identifier - ou transliterando - Identificador Único Universal. Para que serve isto ?? Ora, Como não existem dois GUIDs idênticos, não importa o quanto você tente gerar dois iguais , eles servem para identificar de forma única senhas , manipuladores , chaves , etc...

E o que isso tem a ver com o padrão Identity Field ? Bem, é que o seu funcionamento segue a mesma lógica.

Para gerar um identificador único usando o GUID basta usar o método estático NewGuidSystem.Guid.NewGuid.ToString

A seguir o exemplo de utilização do GUID em uma classe Aluno:

public class Aluno
{
    public int Id { get; set; }
    public string Nome { get; set; }
    public int Idade { get; set; }
    public Guid GlobalId { get; set; }

    public Aluno()
    {
        this.GlobalId = Guid.NewGuid();
    }
}
Public Class Aluno

Public Property Id() As Integer
Public Property Nome() As String
Public Property Idade() As Integer
Public Property GlobalId() As Guid

Public Sub New()
    Me.GlobalId = Guid.NewGuid()
End Sub

End Class
Visual C# VB .NET

Este padrão pertence aos padrões Estruturais.

Abaixo temos uma figura onde vemos a utilização da chave primária Id da tabela Aluno nos objetos Aluno para identificar de forma única cada objeto em memória:


Depois de ter escolhido uma chave primária/campo Identidade , você deve criar também um campo privado no objeto, que será acessado usando reflection como qualquer outro campo privado, para fins de persistência.

Se o objeto não precisar de um identity Field (campo identidade) em sua semântica (Ex: um valor, uma data, um intervalo de tempo), reconsidere o seu mapeamento como uma entidade desde é provável que ele seja um Value Object.

O Identity Field é uma ideia bem simples mas ideias simples podem nos levar a execuções complexas.

Veja os Destaques e novidades do SUPER DVD Visual Basic 2013 (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Rom 8:5 Pois os que são segundo a carne inclinam-se para as coisas da carne; mas os que são segundo o Espírito para as coisas do Espírito.
Rom 8:6 Porque a inclinação da carne é morte; mas a inclinação do Espírito é vida e paz.

Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


José Carlos Macoratti