
NOTA: Mayo de 2018: lectura de TypeORM a LoopBack: una retrospectivapara una perspectiva actualizada!
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
Este artículo revisa las soluciones de mapeo relacional de objetos (ORM) en el ecosistema de JavaScript e identifica una solución ideal basada en requisitos específicos.
¿Qué es un ORM y por qué es tan importante?
Las soluciones ORM son útiles para facilitar el desarrollo de API basadas en datos. Los usuarios tienen necesidades concretas que impulsan el modelo de datos de una aplicación. En el desarrollo heredado, esta arquitectura de datos se implementa típicamente y se controla la versión mediante scripts de base de datos, como scripts SQL. Luego, se usa una biblioteca separada para que la aplicación del servidor ejecute acciones CRUD en la base de datos.
Los ORM funcionan como una API de alto nivel para ejecutar CRUD, y en estos días los ORM de calidad también nos permiten inicializar los datos a través del código. La manipulación, limpieza, etc. de datos complejos suele ser más fácil en el código. Si bien existen herramientas dedicadas de extracción, transformación y carga (ETL), las mismas tareas ETL se pueden implementar fácilmente en ORM.
La implementación de extraer, transformar y cargar con código permite que un sistema integre más fácilmente datos de fuentes muy diferentes. Las bases de datos SQL de varios tipos, los datos NoSQL, los datos del sistema de archivos y los datos de terceros se pueden integrar en un solo lenguaje con un ORM de JavaScript.
Finalmente, el control de datos orientado al código también permite que un sistema implemente el uso de datos en tiempo de ejecución o en el proceso de construcción, y adapte el uso de manera flexible durante el proceso de desarrollo según sea necesario.
Para reafirmar, los ORM mejoran la productividad de los desarrolladores al proporcionar una API de alto nivel, en un solo idioma, con una funcionalidad que tradicionalmente requeriría varias herramientas y conjuntos de habilidades diferentes. La menor necesidad de habilidades, herramientas y horas requeridas facilita el margen del proyecto. Los requisitos imprevistos y el cronograma del proyecto se preparan mejor con una compilación flexible y una configuración de datos en tiempo de ejecución.
Capacidades de ORM preferidas
El contexto particular del proyecto que conduce a esta revisión de ORM requiere la implementación de una aplicación JavaScript universal de vanguardia similar a CMS.
Los marcos de JavaScript universales de vanguardia vienen esencialmente en 3 sabores: Angular, React y Vue. Es decir Angular Universal, Next y Nuxt.
Node admite de forma nativa las operaciones del sistema de archivos, por lo que los requisitos de datos del sistema de gestión de contenido equivalen a una preferencia por una amplia compatibilidad con bases de datos. En total, se consideran los siguientes requisitos:
- Soporte para Mongo y MySQL, con preferencia al soporte de opciones adicionales
- Integrar con Webpack
- Integrar con Express
- Impacto mínimo en el rendimiento en tiempo de ejecución
- Sintaxis intuitiva
- Características adicionales
- Alta proporción de estrellas por emisión de Github
- Mantenido activamente sin fallas de compilación ni dependencias obsoletas
Los candidatos y los resultados
Cada candidato recibió una puntuación entre 0 y 10 para cada capacidad preferida. Una puntuación de 5 significa aceptable. El promedio de una columna puede ser más o menos de 5. Por ejemplo, un ORM con soporte para múltiples bases de datos NoSQL y sin soporte para ninguna base de datos SQL recibirá una puntuación entre 2 y 4. 0 indica la falta total de una característica.

Un agradecimiento especial a joi, pg y knex. Estas bibliotecas no son ORM completos, pero son excelentes en lo que hacen. Si no necesita un ORM completo, eche un vistazo y vea si pueden abordar su necesidad.
Conclusión
Los totales reflejan la utilidad general de cada solución. Los 5 primeros resultados fueron:
- Loopback
- Línea del agua
- Mangosta
- TipoORM
- Secuela
Una combinación de necesidades específicas del proyecto, factores omitidos y preferencia personal conducen a las 3 mejores opciones.
Waterline está fuertemente integrado en el marco de Sails y Mongoose solo es compatible con MongoDB.
Sequelize y NodeORM2 están restringidos a SQL y carecen de generación de API.
Debido a la sintaxis de TypeScript, TypeORM se integra muy bien con un proyecto Angular.
Como desarrollador, recomiendo crear un prototipo de más de una solución superior para identificar al verdadero ganador. Las 3 mejores soluciones, que son candidatas para la creación de prototipos, incluyen:
- Loopback
- TipoORM
- Caminte
Envié esta información a otros desarrolladores del proyecto y, como equipo, decidimos probar TypeORM primero. ¡Vuelve más tarde para ver la retrospectiva!
¿Qué opinas de este resultado? Deje un comentario o contribuya con sus pensamientos a esta comparación de Slant.