Часть I. Введение Что это такое и зачем это нужно

При создании многих приложений в Delphi возникает задача разработки системы сохранения в файл документа или проекта, с которым работает программа. Довольно часто при этом разработчики выбирают непростой путь создания собственных форматов, что, хотя иногда и бывает оправдано, но чаще приводит к возникновению больших и порою критических для проекта трудностей.

Есть две вещи, которые требуются от хорошего механизма сохранения, и которые непросто реализовать самому. Во-первых, нужно, чтобы процедуры записи и чтения информации были достаточно независимыми от реализации самого приложения. Если это не так, то любое изменение в логике программы, требующее новой структуры сохраняемого файла, должно сопровождаться синхронными изменениями в процедурах записи и чтения. Это рано или поздно приведёт к тому, что поддерживать такой проект станет слишком сложно. Во-вторых, в формате записываемого файла должна быть заложена совместимость «снизу вверх», чтобы пользователь обновлённой версии программы мог без проблем открывать файлы, созданные в старой версии, а от программиста для достижения такой возможности требовалось бы минимум усилий.

К счастью, универсальное решение указанных выше проблем даёт стандартная библиотека Delphi. Реализованный в Delphi механизм сериализации (сериализация – это автоматическая выгрузка в файл, BLOB-поле таблицы или другой поток находящейся в памяти системы взаимосвязанных объектов) достаточно развит, соответствует приведённым выше требованиям и предоставляет много вариантов быстрого создания сколь угодно сложных сохраняемых систем.

К сожалению, среди работ, которые можно видеть в книжных магазинах и российском Интернете, не попадаются исследования, специально посвящённые использованию этого механизма. Среди того, что можно найти в Интернете – ряд статей Андрея Чудина, включая опубликованную на сайте «Королевство Delphi» (www.delphikingdom.com) статью «XML-сериализация объекта Delphi», в которой автор описывает собственное решение задачи и предлагает воспользоваться созданным им компонентом. Однако в своих статьях Андрей Чудин не исследует до конца стандартный механизм сериализации.

Цель настоящей статьи – полностью разобрать механизм сериализации объектов стандартными средствами Delphi. Статья написана на основе практического опыта создания приложений, использующих сериализацию для сохранения в файл своих документов, и содержит освещение предметов, нужных для написания этих программ. Надеюсь, что по прочтении этой статьи вы сможете с лёгкостью создавать сохраняемые системы, решающие ваши задачи. Что потребуется от вас

Поскольку сериализация сохраняет в поток состояние объектов, необходимо, чтобы бизнес-логика приложения была разработана в виде системы взаимосвязанных классов. Насколько мне известно, у многих Delphi-программистов бывает не так. В отличие от других систем разработки, Delphi не подталкивает разработчика с самого начала к тому, чтобы отделять логику от интерфейса и писать, помимо классов форм, классы для каждой из задействованных в логике приложения сущностей. Тем не менее, такой подход наиболее оправдан, и сама среда Delphi позволяет создавать проекты с очень интересной архитектурой на основе шаблонов, или паттернов проектирования, о которых в последнее время появилось много хороших статей (например, «Практика применения паттернов проектирования» в RSDN #3 за 2002 год). Основная идея

Воспользоваться стандартным механизмом сериализации объектов в Delphi довольно просто. Надо лишь:

1. Унаследовать класс одного из сериализуемых объектов, который в дальнейшем будет называться «корневым», от TComponent. 2. Создать поток (экземпляр класса-наследника TStream) и вызвать его метод WriteComponent(Instance: TComponent), указав в качестве аргумента ссылку на корневой объект.

Собственно говоря, всё. Как известно, от TStream в Delphi наследуются разные типы потоков, предназначенные для работы с памятью, с файлом и с BLOB-полем таблицы.

<<< 0 1 2 3 4 5 6 7 8 >>>
Хостинг от uCoz