Bem, já com quase dois anos programando sempre em .NET, há algum tempo descobri que não adianta nada sabermos uma plataforma se não sabemos quais as melhores formas de desenvolver e planejar, adotando assim as melhores práticas e designs para que em uma futura manutenção ou mesmo em questões de reusabilidade de código seja facilmente realizada.
Com isso em mente, me dedico atualmente em aprender as Design Patterns de GoF, os Designs de Martin Fowler e agora, abrindo a mente e analisando ferramentas/componentes que auxiliam nas questões que citei um pouco acima. E conversando com meu Amigo João Paulo Carreiro há algum tempo, ele me apresentou o NHibernate, que até o momento é o maior framework para desenvolvedores .NET disponível, podendo ser encontrado no SourceForge, na seguinte URL: http://nhibernate.sourceforge.net. A Microsoft também está desenvolvendo uma ferramenta de O/R Mapping chamado ObjectsSpaces, que imaginava que ela seria distribuída juntamente com o Visual Studio .NET 2005, mas infelizmente virá mais tarde, talvez juntamente com o LongHorn.
Para quem não sabe, NHibernate ou mesmo as ferramentas de O/R Mapping (Object/Relational Mapping), são frameworks (no caso do NHibernate) que mapeiam as tabelas da Base de Dados para os nossos Objetos de nossa aplicação, através de arquivos, que pelo que pude perceber, são arquivos XML.
Claro que inicialmente optei por fazer o exemplo da classe User que está sendo explicada no QuickStart. E logo fui criando uma Aplicação ASP.NET, para poder usufruir do NHibernate. Depois da referència ao NHibernate, criei uma classe User com as suas devidas propriedades:
using System;
namespace SamplesCS{
public class User{
private string userName;
public string UserName{
get {return userName;}
set {userName = value;}
}
}
}
OBS.: Optei por diminuir a quantidade de propriedades para não ocupar muito espaço.
Depois da classe User criada, agora é hora de se fazer o arquivo XML que será responsável pelo Mappging da tabela “users” do Banco de Dados para esta Classe User. Por obrigatoriedade, os arquivos, devem ser: NomeClasse + “hbm.xml”. Sendo o seu conteúdo algo semelhante:

Como podemos ver, no arquivo acima, fazemos o relaciomento entre: Objeto com Tabela da Base de Dados e Campos da Tabela com as Propriedades deste Objeto. Depois de feito isso, em nossa aplicação, fazemos:
public void Teste(){
Configuration cfg = new Configuration();
cfg.AddXmlFile(Server.MapPath("User.hbm.xml"));
ISessionFactory factory = cfg.BuildSessionFactory();
ISession session = factory.OpenSession();
ITransaction transaction = session.BeginTransaction();
User newUser = new User();
newUser.Id = "1";
newUser.UserName = "IsraelAece";
session.Save(newUser);
transaction.Commit();
session.Close();
}
Talvez estranhem, pois estou utilizando o método AddXmlFile(...) para informar qual o arquivo XML que será usado para tomar por base para o mapeamento. Utilizei este método, pois não consegui fazer através do método AddAssembly(...), como explica o QuickStart, dizendo que não era possível encontrar o arquivo de Mapping. Bem, já fica aqui uma dúvida :P
Mas de qualquer forma, este código acima faz com que um novo usuário (User) seja inserido na tabela “users”, e o mais interessante disso: sem nenhuma linha de Querys SQL. De certeza forma, parece até mágica, mas isso está tudo encapsulado no Framework, pois ele se encarrega de criar as Querys e seus respectivos paràmetros.
Pois bem, ainda nem sequer explorei tudo o que o NHibernate fornece, mas tem outras “features” bem interessantes, como Caching e Lazy Loading, características quais, em breve pretendo aqui colocar.