Tích hợp OOP (MQL5) và SQL: Khái niệm ORM
Việc sử dụng cơ sở dữ liệu trong chương trình MQL ngụ ý rằng thuật toán được chia thành 2 phần: phần điều khiển được viết bằng MQL5, và phần thực thi được viết bằng SQL. Kết quả là, mã nguồn có thể bắt đầu trông giống như một mớ hỗn độn và đòi hỏi sự chú ý để duy trì tính nhất quán. Để tránh điều này, các ngôn ngữ hướng đối tượng đã phát triển khái niệm Ánh xạ Quan hệ-Đối tượng (ORM), tức là ánh xạ các đối tượng sang các bản ghi bảng quan hệ và ngược lại.
Bản chất của phương pháp này là đóng gói tất cả các hành động trong ngôn ngữ SQL vào các lớp/cấu trúc của một tầng đặc biệt. Kết quả là, phần ứng dụng của chương trình có thể được viết bằng một ngôn ngữ OOP thuần túy (ví dụ, MQL5), mà không bị phân tâm bởi các chi tiết của SQL.
Khi có một triển khai ORM đầy đủ (dưới dạng "hộp đen" với tập hợp tất cả các lệnh), nhà phát triển ứng dụng nói chung có cơ hội không cần phải học SQL.
Ngoài ra, ORM cho phép "âm thầm" thay đổi "động cơ" của DBMS nếu cần thiết. Điều này không đặc biệt liên quan đến MQL5, vì chỉ có cơ sở dữ liệu SQLite được tích hợp sẵn, nhưng một số nhà phát triển thích sử dụng DBMS đầy đủ và kết nối chúng với MetaTrader 5 bằng cách nhập DLL.
Việc sử dụng các đối tượng với hàm tạo và hàm hủy rất hữu ích khi chúng ta cần tự động chiếm dụng và giải phóng tài nguyên. Chúng ta đã đề cập đến khái niệm này (RAII, Resource Acquisition Is Initialization) trong phần Quản lý mô tả tệp, tuy nhiên, như chúng ta sẽ thấy sau này, công việc với cơ sở dữ liệu cũng dựa trên việc phân bổ và giải phóng các loại mô tả khác nhau.
Hình ảnh sau đây mô tả sơ đồ tương tác của các tầng phần mềm khác nhau khi tích hợp OOP và SQL dưới dạng ORM.
ORM, Object-Relational Mapping
Là một lợi ích bổ sung, một "vỏ bọc" đối tượng (không chỉ là ORM dành riêng cho cơ sở dữ liệu) sẽ tự động hóa việc chuẩn bị và chuyển đổi dữ liệu, cũng như kiểm tra tính đúng đắn để ngăn ngừa một số lỗi.
Trong các phần tiếp theo, khi chúng ta đi qua các hàm tích hợp sẵn để làm việc với cơ sở dữ liệu, chúng ta sẽ triển khai các ví dụ, dần dần xây dựng tầng ORM đơn giản của riêng mình. Do một số đặc thù của MQL5, các lớp của chúng ta sẽ không thể cung cấp tính phổ quát bao phủ 100% các tác vụ nhưng sẽ hữu ích cho nhiều dự án.