quarta-feira, 9 de setembro de 2009

Iniciando do Zero: Entendendo o NHibernate

Neste post quero deixar claro como é feita a utilização do NHibernate para que cada objeto da aplicação possa ser mapeado e gerenciado pelo ORM, lembrando que não é apenas a criação do mapeamento, responsabilidade do NHibernate, como também a sua manutenção em tempo de execução, mas isso eu deixarei mais claro em posts futuros. Na sequência construirei um pequeno exemplo, para que possamos vizualizar como tudo deve ser feito.

Consideramos a classe Pessoa, a seguir modelada:


Para quem ainda não está acostumado a utilizar o Visual Studio (eu utilizo o VS 2008 Professional), esse diagrama pode ser feito no próprio visual a partir do código da classe ou não, qualquer mudança na classe é refletida no modelo e qualquer mudança no modelo é refletido no código da classe. Este é o código da classe:

Public Class Pessoa

Private _id As Long
Private _nome As String
Private _cpf As String
Private _endereco As String
Private _telefone As String
Private _dataNascimento As Date

Public Sub New()
End Sub

Public Overridable ReadOnly Property Id() As Long
Get
Return _id
End Get
End Property

Public Overridable Property Nome() As String
Get
Return _nome
End Get
Set(ByVal value As String)
_nome = value
End Set
End Property

Public Overridable Property Cpf() As String
Get
Return _cpf
End Get
Set(ByVal value As String)
_cpf = value
End Set
End Property

Public Overridable Property Endereco() As String
Get
Return _endereco
End Get
Set(ByVal value As String)
_endereco = value
End Set
End Property

Public Overridable Property Telefone() As String
Get
Return _telefone
End Get
Set(ByVal value As String)
_telefone = value
End Set
End Property

Public Overridable Property DataDeNascimento() As Date
Get
Return _dataNascimento
End Get
Set(ByVal value As Date)
_dataNascimento = value
End Set
End Property

End Class

É importante observar a presença da propriedade Id, presente na classe. Esta propriedade é obrigatória para que possa ser realizado o mapeamento objeto relacional. O Id será utilizado pelo NHibernate para um controle interno, nos posts futuros irei explicar o porque disso, por enquanto o importante é saber que o Id sempre deverá ser utilizado.
Agora realizaremos o mapeamento da classe Pessoa para que o NHibernate possa realizar o gerenciamento sobre cada objeto criado pela classe, tomando toda a responsabilidade de comunicação com o banco de dados e persistência no mesmo. Para que isso seja possível é necessário a criação de um documento XML (eXtensible Markup Language), este documento servirá de base para o NHibernate compreender como é estruturado o objeto que deverá ser mapeado. Este processo de criação do XML é geralmente chamado de mapeamento pelos programadores.
Cada uma das propriedades de uma classe deve ser mapeada, assim como a própria classe. A declaração do mapeamento de cada um destes é feito por uma tag XML, para as propriedades utiliza-se a tag property, e para a classe a tag . Assim construimos o seguinte documento XML para o mapeamento da classe Pessoa:



Está em imagem porque não consegui publicar o texto XML aqui no Blog, mais tarde concertarei isso.

É interessante verificar que o Id tem uma tag própria de declaração, e dentro deste há a tag que define como será a geração do número do Id. Na documentação do NHibernate pode-se encontrar mais coisas sobre o generator, o "native" presente no mapeamento, utiliza a geração de Id configurada no bando de dados que está sendo usado.

Descrevendo os atributos utilizados na declaração da classe:
name: são na verdade dois nomes. Oprimeiro é o nome completo da classe, nesse caso, como criei uma nova aplicação e o nome que dei a solution foi "Exemplo", o nome completo da classe Pessoa é "Exemplo.Pessoa". O segundo nome é o nome do assembly da aplicação, que é o mesmo que foi dado a solution "Exemplo" .
table: é o nome que será atribuído a tabela criada no banco.

Descrevendo os atributos utilizados no mapeamento das propriedades:
name: deve ser o exato nome da propriedade que está sendo mapeada.
column: é o nome que será atribuído a coluna criada na tabela.
type: é o tipo da propriedade, este deve ser exatamente o mesmo tipo declarado na propriedade. not-null: define na tabela do banco se a propriedade pode ou não ser nula.
length: define o tamanho máximo declarado na coluna da tabela, somente em propriedades do tipo texto (String, char.. etc).
unique: cria uma chave única para a coluna da tabela, referente a propriedade mapeada.
access: Utilizado no mapeamento do Id. Também pode ser utilizado em qualquer outra propriedade. Define como será o acesso a propriedade, como abrigatóriamente o Id só pode ser lido (readOnly) é definido o acesso "nosetter.camelcase-underscore" e utilizado o readOnly na declaração do código da propriedade.
A ordem em que esses atributos são escritos não interferem no funcionamento. Há ainda outros atributos, que serão abordados futuramente, novamente cito que na documentação do NHibernate pode-se conferir todos os atributos que podem ser utilizados.
Acho que esse é um importante começo no uso do NHibernate, entender como é a sua utilização. mas para que possamos utilizar devemos saber como configurar o NHibernate, juntamente com o banco de dados. Essas informações vem juntamente com o NHibernate, quando é feito seu download pode-se conferir na pasta Core\Configuration_Templates as configurações para cada tipo de banco. Mais tarde abordarei este assunto aqui também, mostrando passo a passo como fazer uma pequena aplicação utilizando o NHibernate.

Até mais...

Documentação do NHibernate: https://www.hibernate.org/343.html

quinta-feira, 3 de setembro de 2009

Falando Sobre o NHibernate

O NHibernate é uma API portada para a plataforma .NET a partir do Hibernate, que funciona em plataforma Java. A utilização do NHibernate e do Hibernate é similar, então se alguém ja estiver habituado a utilização de algum destes, não sentirá dificuldades.
O NHibernate é um ORM (Object Relational Management), traduzindo, ele é um mapeador objeto relacional. Com ele é possível escrever aplicações em linguagens orientadas o objetos e utilizar qualquer banco de dados relacional, sem ser necessário a criação de nenhuma linha de em linguagem SQL para a persistência dos dados no banco. E sim acredite é fácil de usar e não requer muita experiência para a criação de aplicações simples. O melhor na utilização do NHibernate é poder conversar com um banco de dados relacional em linguagem orientada a objetos, ou seja, você salva e recupera objetos, e não linhas de tabela.
A utilização é bem simples, e é utilizado apenas script XML para que tudo possa acontecer. Mas fica fácilexplicar conceitualmente coisas que podem ser vizualizadas. Então minha dica para quem está interessado é acompanhar o blog, pois logo estarei publicando um artigo de como utilizar o NHibernate. Para quem tem pressa basta acessar o site: https://www.hibernate.org/343.html e fazer o download da documentação.
Até Logo...

Desenvolvimento .NET com NHibernate

Blog novo, com muita coisa nova. Estou terminando meu curso de ciência da computação e espero poder ajudar aqui desenvolvedores interessados em desenvolvimento com a plataforma .NET. Atualmente estou trabalhando também com o NHibernate, excelente ferramenta para ser utilizada junto com as linguagens .NET, ja venho utilizando a quase um ano e gostaria de compartilhar meu aprendizado com seu uso, trocar idéias e experiências com todos aqueles que tiverem interesse. Adiante estarei publicando algumas coisas inovadoras que acabei construíndo e alguns artigos exploratórios sobre o mundo .NET e NHibernate.