Terça-feira, Julho 15, 2008

NHibernate hbm

Antes de continuar os artigos, que a propósito estão bem atrasados, gostaria de fazer uma proposta a comunidade open-source.

Se analisarmos o comportamento e as dificuldades para se utilizar o NHibernate, a maior delas se chama "mapeamento objeto-relacional", isto é, los malditos ".hbm". Por mais que a estratégia os hbm seja interessante, por externalizar ao modelo de domínio detalhes da persistência, ela é muito trabalhosa.

Ao refatorarmos certa classe ou alterarmos o banco de dados, teremos problemas se não for checado manualmente esses arquivos.

Existem alternativas como o NHibernate Mapping Attributes, mas apesar do trabalho interessante dos desenvolvedores que trabalham nele, não acho uma boa abordagem, devido aos atributos não se organizarem, isto é, atributos que são aglomerados terão que ser definidos com índices para manterem sua ordem. É possível realizar a mesma implementação, com um pouco mais de trabalho, eliminando tal problema.

Analisando o comportamento e funcionamento do db4o, a idéia por trás desse é muito interessante, por permitir que eu persista qualquer tipo. Penso eu, se não seria possível adotar tal abordagem no nhibernate, como uma extensão ou uma camada acima, mas que não esconde-se detalhes do próprio. Seria algo como o seguinte:

Dado a classe abaixo:

public class MyClass {
public string FirstName { get; set; }
public string LastName { get; set; }
}

usaríamos:

var container = ObjectContainerFactory.GetContainer();
var myObj = new MyClass();

container.Save(myObj);
container.Flush();

e isso seria o suficiente para se criar uma tabela relacional contendo os dados do objeto no banco de dados, assim como o seu devido mapeamento, transparentemente...

Vou pensar e melhorar a idéia, continuo depois.

0 comentários: