Durante meu aprendizado, usei o NHibernate para alguns projetos menores, que na maioria das vezes codifiquei e projetei sozinho. Agora, antes de iniciar algum projeto maior, surgiu a discussão sobre como projetar o acesso aos dados e se deve ou não usar uma camada ORM. Como ainda estou em meu aprendizado e ainda me considero um iniciante em programação empresarial, não tentei realmente forçar minha opinião, que é que usar um mapeador relacional de objetos para o banco de dados pode facilitar muito o desenvolvimento. Os outros programadores da equipe de desenvolvimento são muito mais experientes do que eu, então acho que farei o que eles mandarem. :-)
No entanto, não entendo completamente duas das principais razões para não usar o NHibernate ou um projeto semelhante:
- Pode-se simplesmente construir seus próprios objetos de acesso a dados com consultas SQL e copiar essas consultas do Microsoft SQL Server Management Studio.
- Depurar um ORM pode ser difícil.
Então, é claro que eu poderia simplesmente construir minha camada de acesso a dados com muitos SELECT
s etc, mas aqui eu perco a vantagem de junções automáticas, classes de proxy de carregamento lento e um menor esforço de manutenção se uma tabela receber uma nova coluna ou uma coluna receber renomeado. (Atualização numerosos SELECT
, INSERT
e UPDATE
consultas vs. atualizar a configuração de mapeamento e possivelmente refatoração das classes empresariais e DTOs.)
Além disso, usando o NHibernate, você pode ter problemas imprevistos se não conhecer o framework muito bem. Isso poderia ser, por exemplo, confiar no Table.hbm.xml onde você define o comprimento de uma string para ser validado automaticamente. No entanto, também posso imaginar bugs semelhantes em uma camada de acesso a dados baseada em consulta SqlConnection “simples”.
Finalmente, esses argumentos mencionados acima são realmente um bom motivo para não utilizar um ORM para um aplicativo corporativo baseado em banco de dados não trivial? Existem provavelmente outros argumentos que eles / eu podemos ter perdido?
(Eu provavelmente deveria acrescentar que acho que este é o primeiro grande aplicativo baseado em .NET / C # que exigirá trabalho em equipe. Boas práticas, que são vistas como bastante normais no Stack Overflow, como teste de unidade ou integração contínua, não são -existindo aqui até agora.)