Сериализация полей - Разработка модуля для хранения и управления документами в электронном виде

Документ может содержать произвольное количество полей различных типов (номер, имя, фамилия, отчество и т. д.). Программист, реализующий наследников класса Document, сам определяет набор, названия и логику заполнения полей. Очевидным становится невозможность хранения каждого поля в отдельном столбце таблицы documents. Разумное решение проблемы -- использование механизма сериализации, который также поддерживается средой Ruby on Rails.

Сериализация позволяет сохранять произвольную структуру языка Ruby (в частности, хеш) в строковое поле таблицы БД для последующего ее извлечения.

В разрабатываемом модуле модель документа содержит поле data, в которое сериализуются поля. Набор полей указывается конечным разработчиком в конкретном классе.

Каждому полю добавлены методы доступа (getter и setter) для удобной работы с экземпляром класса. Методы реализованы таким образом, что с точки зрения конечного программиста работа ведется с отдельными атрибутами объекта, а с точки зрения класса -- с одним и тем же полем data.

Пример.

    1) Создается класс-наследник с единственным полем number: 2) class Inn < document 3) document_field :number #добавление поля 4) end 5) создается объект класса, инициализируется единственное поле, и из него извлекается значение: 6) doc = inn. new 7) doc. number = 12345678 #сеттер для инициализации 8) print doc. number #геттер для получения значения

Пример показывает, что программист работает с полями документа, как с обычными атрибутами. Однако методы доступа сохраняют и извлекают значения из хеша, хранимого в атрибуте data, сериализуемом и проецируемом на одноименное поле в таблице documents базы данных.

После приведенных в примере преобразований атрибут data объекта doc будет содержать хеш следующего вида:

{:number => 12345678}

Похожие статьи




Сериализация полей - Разработка модуля для хранения и управления документами в электронном виде

Предыдущая | Следующая