Você usaria NHibernate para um projeto com um banco de dados legado, que é, em parte, fora de seu controle?

StackOverflow https://stackoverflow.com/questions/454249

  •  19-08-2019
  •  | 
  •  

Pergunta

Para mim, a resposta é atualmente: Não, eu usaria iBatis, porque NHibernate é uma dor, quando o modelo de banco de dados eo modelo de objeto não estão em sincronia. Se eu não tem controle total sobre o banco de dados eu acabar com um monte de trabalho.

Por que eu pedir?

Bem, em primeiro lugar: eu nunca usei NHibernate. Eu só sei que a partir da superfície. Eu li sobre as vantagens de iBatis para bancos de dados legados.

Segundo: Recentemente eu tive uma discussão com alguém que trabalhou com Hibernate (jep, sem 'N' antes do Hibernate). Ele me disse que os quadros ORM estão agora bastante avançado, e defendeu Hibernate. Desde que eu não estava interessado em NHibernate, eu não acompanhar os desenvolvimentos recentes.

Talvez eu é hora de repensar a minha resposta, ou não?

Foi útil?

Solução

iBatis é certamente fácil para mapear objetos para sistemas de banco de dados legado.

Mais recentemente NHibernate 1.2 e 2.0 têm um conjunto de recursos que podem fazer você repensar iBatis.

NHibernate funciona com chaves compostas, que pode ocorrer com freqüência em bancos de dados antigos, eles nem sempre são agradáveis ??para trabalhar com mas o suporte está lá para isso.

NHibernate pode utilizar procedimentos armazenados para operações CRUD em entidades, também vistas de banco de dados.

As coleções podem ser personalizado procedimentos ou consultas SQL armazenado. As coleções podem usar o atributo property-ref quando a relação de chave estrangeira não mapeia diretamente para a chave primária do outro lado.

Algumas destas características podem tirar o desempenho / potência de nhibernate, ou seja, Lazy Loading com property-ref não funciona (em tudo?), Mas é a maioria dos casos, há razões para isso.

Outros pontos: (que não são realmente relacionados ao seu banco de dados legado, mas ainda pode ajudar a decidir sobre a escolha de tecnologia)

A comunidade Nhibernate parece muito mais rico do que o iBatis. Estou em ambas as listas e o volume do apoio à NHibernate é muito grande em comparação com o grupo iBatis. Assim, o apoio deve ser mais fácil.

Além disso, há uma quantidade crescente de contrib / ferramentas de 3 para NHibernate. Coisas como O NHibernate Profiler, o Nhibernate Query Analyzer, NHibernate Contrib, Fluent NHibernate para citar alguns.

Talvez você pode expandir o que vantagens você acredita iBatis tem atualmente. NHibernate certamente tem sido bastante ativo recentemente e ganhou muitos novos recursos, muitos dos quais não ajudar na legado / hard para modificar esquemas.

E para responder à pergunta, sim nós usar NHibernate com bancos de dados legados que têm relações terríveis, chaves compostas, relacionamentos quebrados. Nós ainda também têm uma pequena quantidade de código baseado em iBatis. Nós já não escrever qualquer código mais iBatis embora.

Outras dicas

Sim, considere NHibernate. É o padrão ouro por uma razão. Ouvi dizer que iBATIS suporta possibilidades de mapeamento de loucos, mas com IUserType do NHibernate você pode mapear qualquer coisa, até mesmo colunas realmente estranhas.

@Ahmad, todo o ponto de ORM é para evitar um acoplamento forte entre os seus objetos e seu esquema. Se você tem esse problema que você está fazendo errado.

Além disso, com NHibernate há uma abundância de opções para consultas personalizadas, propriedades de fórmulas e procedimentos armazenados. HQL é extremamente poderoso e Critérios é flexível.

Eu acho que você estará fazendo seus clientes um desserviço se não o fizer, pelo menos spike NHibernate.

Estou usando nHibernate em um aplicativo existente. Eu usá-lo para todos os novos desenvolvimentos, não tenho intenção de portar o material existente sobre qualquer simplesmente não há uma razão convincente, mas para novidades sobre o projeto funciona muito bem.

Se você está indo para a porta do código sobre, então você deve ser capaz de alterar o banco de dados para combinar melhor com seu modelo de domínio, sem muito impacto (dependendo de como gotejante seu banco de dados é isto que acessá-lo). Alterar o modelo de domínio teria impacto da aplicação no entanto.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top