POO (MQL5) e integración SQL: concepto de ORM

El uso de una base de datos en un programa MQL implica que el algoritmo se divide en 2 partes: la parte de control se escribe en MQL5, y la parte de ejecución se escribe en SQL. Como resultado, el código fuente puede empezar a parecer un mosaico y requerir atención para mantener la coherencia. Para evitarlo, los lenguajes orientados a objetos han desarrollado el concepto de mapeo objeto-relacional (ORM, por sus siglas en inglés), es decir, el mapeo de objetos a registros de tablas relacionales y viceversa.

La esencia del enfoque consiste en encapsular todas las acciones del lenguaje SQL en clases/estructuras de una capa especial. Como resultado, la parte de aplicación del programa puede escribirse en un lenguaje puramente POO (programación orientada a objetos), como por ejemplo, MQL5, sin distraerse con los matices de SQL.

En presencia de una implementación ORM completa (en forma de «caja negra» con un conjunto de todos los comandos), un desarrollador de aplicaciones generalmente tiene la oportunidad de no aprender SQL.

Además, ORM permite cambiar «imperceptiblemente» el «motor» del SGBD si es necesario. Esto no es particularmente relevante para MQL5, porque solo la base de datos SQLite está integrada en él, pero algunos desarrolladores prefieren utilizar DBMS completos y conectarlos a MetaTrader 5 mediante la importación de DLLs.

El uso de objetos con constructores y destructores es muy útil cuando necesitamos adquirir y liberar recursos automáticamente. Hemos tratado este concepto (RAII, Resource Acquisition Is Initialization) en la sección Gestión de descriptores de archivos; sin embargo, como veremos más adelante, el trabajo con la base de datos también se basa en la asignación y liberación de distintos tipos de descriptores.

En la siguiente imagen se muestra esquemáticamente la interacción de diferentes capas de software al integrar la programación orientada a objetos (POO) y SQL en forma de ORM.

Mapeo Objeto-Relacional ORM

ORM, Mapeo Objeto-Relacional

Además, un «envoltorio» de objetos (no sólo un ORM específico de la base de datos) automatizará la preparación y transformación de los datos, además de comprobar su corrección para evitar algunos errores.

En las siguientes secciones, mientras recorremos las funciones integradas para trabajar con la base, implementaremos los ejemplos, construyendo gradualmente nuestra propia capa ORM sencilla. Debido a algunas especificidades de MQL5, nuestras clases no podrán proporcionar un universalismo que cubra el 100 % de las tareas, pero serán útiles para muchos proyectos.