OOP (MQL5) 和 SQL 集成ORM 概念

在 MQL 程序中使用数据库意味着算法被分为两部分:控制部分用 MQL5 编写,执行部分用 SQL 编写。这就导致源代码可能开始看起来像是东拼西凑的,并且需要注意保持一致性。为避免这种情况,面向对象的语言发展了对象关系映射 (ORM) 的概念,即将对象映射到关系表记录,反之亦然。

该方法的本质是将 SQL 语言中的所有操作封装在一个特殊层的类/结构体中。因此,程序的应用部分可以用纯粹的 OOP 语言(例如 MQL5)编写,而不会被 SQL 的细微差别分散注意力。

如果存在完整 ORM 实现(以包含所有命令的“黑匣子”形式),应用程序开发人员通常无需学习 SQL。

此外,ORM 允许在必要时“不知不觉地”更改 DBMS 的“引擎”。这对于 MQL5 来说并非特别重要,因为它只内置了 SQLite 数据库,但一些开发人员更喜欢使用功能齐全的 DBMS,并通过导入 DLL将它们连接到 MetaTrader 5。

当我们需自动获取和释放资源时,使用带有构造函数和析构函数的对象非常有用。我们已经在 文件描述符管理一节中介绍了这个概念(RAII,资源获取即初始化),然而,正如我们稍后将看到的,使用数据库也是基于不同类型描述符的分配和释放。

下图示意性地描绘了以 ORM 形式集成 OOP 和 SQL 时不同软件层的交互。

ORM 对象关系映射

ORM,对象关系映射

还有一个优势,对象“包装器”(不仅仅是特定于数据库的 ORM)会自动完成数据准备和转换,并且会检查正确性以防止某些错误。

在以下章节中,当我们逐步了解用于操作数据库的内置函数时,我们将实现这些示例,逐渐构建我们自己的简单 ORM 层。由于 MQL5 的某些特性,我们的类将无法提供 100% 覆盖任务的通用性,但对许多项目将非常有用。