Mi pregunta es con respecto a las tecnologías ORM y JDBC, ¿con qué criterio elegiría una tecnología ORM en comparación con JDBC y de otro modo?ORM Technologies vs JDBC?
Gracias.
Mi pregunta es con respecto a las tecnologías ORM y JDBC, ¿con qué criterio elegiría una tecnología ORM en comparación con JDBC y de otro modo?ORM Technologies vs JDBC?
Gracias.
Complejidad.
ORM Si su aplicación es impulsada por un dominio y las relaciones entre objetos son complejas o necesita que este objeto defina lo que hace la aplicación.
JDBC/SQL Si su aplicación es lo suficientemente simple como para presentar datos directamente desde la base de datos o las relaciones entre ellos son bastante simples.
El libro "Los patrones de arquitectura de aplicación empresarial", de Martin Fowler explica mucho mejor las diferencias entre estos dos tipos:
Ver: Domain Model y Transaction Script
También depende de la curva de aprendizaje.
Ebean ORM tiene una curva de aprendizaje bastante bajo (API simple, lenguaje de consulta sencilla) si usted es lo suficientemente contento con anotaciones JPA para el mapeo (@Entity, @Table, @OneToMany etc).
JDBC
de hibernación.
creo que se olvidó de mirar a "Mapeo Relacional funcional"
me habría resumir diciendo:
La fuerza de varias tecnologías de "Mapeo relacional" es la portabilidad: se asegura de que su aplicación se ejecutará en la mayoría de las bases de datos de ACID. De lo contrario, lidiará con las diferencias entre varios dialectos SQL cuando escriba manualmente las solicitudes SQL.
Por supuesto que puede contenerse con el estándar SQL92 (y luego hacer algo de programación funcional) o se puede reutilizar algunos conceptos de la programación functionnal con ORM marcos
Los strenghs ORM se construyen sobre un objeto de sesión que puede actuar como un cuello de botella:
Sin embargo, sus puntos fuertes son también sus puntos débiles:
La sesión debe ser capaz de comparar objetos por lo que necesita instrumentos es igual a métodos/hashCode pero los objetos igualdad debe tener sus raíces en "Claves de negocio "y no el ID de la base de datos (¡los nuevos objetos transitorios no tienen ID de base de datos!). Sin embargo, algunos conceptos reificados no tienen igualdad comercial (una operación, por ejemplo). Una solución común se basa en los GUID que tienden a molestar a los administradores de la base de datos.
La sesión debe espiar los cambios de relación, pero sus reglas de asignación impiden el uso de colecciones inadecuadas para los algoritmos de negocio. En algún momento le gustaría usar un HashMap pero el ORM requerirá que la clave sea otro "Objeto de dominio enriquecido" en lugar de otro ligero ... Luego debe implementar la igualdad de objeto en el objeto de dominio enriquecido que actúa como clave. .. Pero no se puede porque este objeto no tiene contraparte en el mundo de los negocios. Así que vuelve a una lista simple en la que debe iterar (y se producen problemas de rendimiento)
La API de ORM a veces no es apta para el uso en el mundo real. Por ejemplo, las aplicaciones web del mundo real intentan forzar el aislamiento de la sesión agregando algunas cláusulas "DONDE" cuando obtiene datos ... Luego, el "Session.get (id)" no es suficiente y debe pasar a una configuración más compleja DSL (HSQL, Criteria API) o volver a SQL nativo
Los objetos de la base de datos entra en conflicto con otros objetos dedicados a otros marcos (como OXM frameworks = Object/XML Mapping). Por ejemplo, si sus servicios REST utilizan la biblioteca de jackson para serializar un objeto comercial. Pero este Jackson se asigna exactamente a un Hibernate One. Entonces, o combinar ambos y un fuerte acoplamiento entre su API y su base de datos aparece o se le debe aplicar una traducción y todo el código que ha guardado desde el ORM se pierde allí ...
En el otro lado , FRM es una compensación entre "Asignación relacional de objetos (ORM) y consultas SQL nativas (con JDBC)
La mejor manera de explicar las diferencias entre FRM y ORM consiste en adoptar un enfoque DDD.
libera las restricciones impuestas a la sesión de ORM y se basa la mayor parte de tiempo en un DSL sobre el SQL (por lo que la portabilidad no importa) Pero, por otro lado, debe observar los detalles de la transacción, la concurrencia y emite
Lista de personas = queryFactory.selectFrom (persona) .where ( person.firstName.eq ("John"), person.lastName.eq ("Doe")) .fetch();
+1. Mi propia forma de expresarlo es que debes tener una idea de cuándo el gran costo constante de ORM "se paga por sí mismo". –
Tengo que estar de acuerdo con esto, pero también agregaría que hay ocasiones en las que tiene sentido usar ambas dentro de una sola aplicación. –
... y si su aplicación es tan compleja que se justifica un ORM, el arquitecto realmente debería preguntarse si existe una forma mejor de descomponer la aplicación (sugerencia: microservicios). –