Майстри delphi, збереження і завантаження даних в об'єкти на прикладі колекцій (документація,

Збереження і завантаження даних в об'єкти на прикладі колекцій.

Якщо у Вашій програмі використовуються класи для опису об'єктів деякої предметної області, то дані, їх ініціалізували, можна зберігати і в базі даних. Але можна вибрати набагато більш продуктивний підхід, який доступний в Delphi / C ++ Builder. Середовище розробки Delphi / C ++ Builder зберігає ресурси всіх форм в довічних або текстових файлах і ця можливість доступна і для розроблюваних з її допомогою програм. В даному випадку, для оцінки зручностей такого підходу найкраще розглянути конкретний приклад.

Саму колекцію з передплатниками нам потрібно буде помістити в якийсь базовий клас, який ми і будемо зберігати і завантажувати. На роль такого підходить клас TMailer - поштовий клієнт.
Почнемо з TMailClient.

Тепер помістимо клас TMailList в клас TMailer. У нього можна буде потім включити дані про параметри доступу до поштового сервера для відправки пошти. Він міг би і відправляти пошту, але в даному прикладі це не використано, щоб не перевантажувати код.

Тобто в нашому прикладі він виконує тільки роль носія даних про передплатників та їх передплатою. Клас TComponent, від якого він успадковується можна зберегти в файл, в той час як TCollection самостійно не збережеться. Тільки якщо вона агрегована в TComponent. Саме це у нас і реалізовано.


Повторюся. В даному випадку ми успадковуємо від класу TComponent, для того, щоб була можливість запису даних об'єкта в файл. Властивість MailList містить вже об'єкт класу TMailList.
Реалізація всіх наведених класів наведена нижче.

Функція CreateFileList створює по будь-яким правилам список файлів на основі переданого їй списку каталогів, обходячи їх рекурсивно. Наприклад, вона може бути реалізована так.

У підсумку ми маємо в своєму розпорядженні класом TMailer, що містить всю необхідну нам інформацію. Тепер перейдемо до створення об'єкта, їх збереження та завантаження.

Після завантаження даних ми можемо працювати з даними в нашій колекції передплатників. Додавати і видаляти їх (Mailer.MailList.Add; Mailer.MailList.Delete (Index);). При завершенні роботи програми необхідно зберегти вже нові дані в той же файл.

Зберігання даних в файлі дозволяє відмовитися від використання БД, якщо обсяг даних не дуже великий і немає необхідності в спільному доступі до даних.
Найголовніше - ми організуємо все дані у вигляді набору зручних для роботи класів і не витрачаємо час на їх збереження і ініціалізацію з БД.
Наведений приклад лише ілюструє цей підхід. Для його реалізації можуть підійти і 2 таблиці в БД. Однак наведений підхід зручний за умови, що дані мають складну ієрархію. Наприклад, вкладені колекції різних типів набагато складніше розкласти в базі даних, для їх вилучення потрібно SQL. Вирішуйте самі, судячи за своєю конкретному завданні.

Далі наведено код функцій для збереження / читання компонента.