¿Usaría NHibernate para un proyecto con una base de datos heredada, que está parcialmente fuera de su control?

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

  •  19-08-2019
  •  | 
  •  

Pregunta

Para mí, la respuesta es actualmente: No, usaría iBatis, porque NHibernate es una molestia, cuando el modelo de base de datos y el modelo de objeto no están sincronizados. Si no tengo control total sobre la base de datos, termino con mucho trabajo.

¿Por qué pregunto?

Bueno, antes que nada: nunca usé NHibernate. Solo lo sé desde la superficie. He leído sobre las ventajas de iBatis para las bases de datos heredadas.

Segundo: recientemente tuve una discusión con alguien que trabajó con Hibernate (jep, sin 'N' antes de Hibernate). Me dijo que los marcos de ORM ahora están bastante avanzados y abogó por Hibernate. Como no estaba interesado en NHibernate, no hice un seguimiento de los desarrollos recientes.

¿Quizás es hora de repensar mi respuesta, o no?

¿Fue útil?

Solución

iBatis es ciertamente fácil de asignar objetos a sistemas de bases de datos heredados.

Más recientemente, NHibernate 1.2 y 2.0 tienen un conjunto de características que pueden hacer que reconsidere iBatis.

NHibernate funciona con claves compuestas, que pueden ocurrir con frecuencia en bases de datos antiguas, no siempre es agradable trabajar con ellas, pero hay soporte para esto.

NHibernate puede utilizar procedimientos almacenados para operaciones CRUD en entidades, también vistas de bases de datos.

Las colecciones pueden ser procedimientos almacenados personalizados o consultas SQL. Las colecciones pueden usar el atributo property-ref cuando la relación de clave externa no se asigna directamente a la clave primaria en el otro lado.

Algunas de estas características pueden afectar el rendimiento / potencia de nhibernate, es decir, la carga diferida con propiedad-ref no funciona (¿en absoluto?), pero en la mayoría de los casos hay razones para ello.

Otros puntos: (que en realidad no están relacionados con su base de datos heredada, pero que pueden ayudarlo a decidir sobre una opción tecnológica)

La comunidad Nhibernate parece mucho más rica que la iBatis. Estoy en ambas listas y el volumen de soporte para NHibernate es bastante grande en comparación con el grupo iBatis. Entonces el soporte debería ser más fácil.

También hay una cantidad cada vez mayor de herramientas contrib / de terceros para NHibernate. Cosas como NHibernate Profiler, Nhibernate Query Analyzer, NHibernate Contrib, Fluid NHibernate por nombrar algunos.

Quizás pueda ampliar las ventajas que cree que tiene iBatis actualmente. NHibernate ciertamente ha estado bastante activo recientemente y ha adquirido muchas características nuevas, muchas de las cuales ayudan en esquemas heredados / difíciles de modificar.

Y para responder a la pregunta, sí, utilizamos NHibernate con bases de datos heredadas que tienen relaciones horribles, claves compuestas, relaciones rotas. También tenemos una pequeña cantidad de código basado en iBatis. Sin embargo, ya no escribimos más código iBatis.

Otros consejos

Sí, considere NHibernate. Es el estándar de oro por una razón. He oído que iBATIS admite posibilidades locas de mapeo, pero con IUserType de NHibernate puede mapear cualquier cosa, incluso columnas realmente extrañas.

@Ahmad, el objetivo de ORM es evitar un acoplamiento estrecho entre sus objetos y su esquema. Si tiene este problema, lo está haciendo mal.

Además, con NHibernate hay muchas opciones para consultas personalizadas, propiedades de fórmulas y procedimientos almacenados. HQL es extremadamente poderoso y Criteria es flexible.

Creo que estarás perjudicando a tus clientes si no picas al menos NHibernate.

He estado usando nHibernate en una aplicación existente. Lo uso para todos los nuevos desarrollos, no tengo intención de portar las cosas existentes ya que no hay una razón convincente, pero para las nuevas cosas en el proyecto funciona muy bien.

Si va a transferir el código, entonces debería poder cambiar la base de datos para que coincida mejor con su modelo de dominio, sin mucho impacto (dependiendo de cuán fugas sea su base de datos, es decir, quién accede a ella). Sin embargo, cambiar el modelo de dominio afectaría a la aplicación.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top