Настраиваемые пользователем структуры данных

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

FieldNo  FieldName          DataType           DefaultValue
 0        Name               String             ""
 1        Age                Integer            "0"
 ...

Затем программа должна загрузить этот файл, управлять динамической структурой данных (динамически не «изменение во время выполнения», а способом «пользователь может изменить через файл конфигурации») и разрешить простой и безопасный доступ к полям данных. .

Я это уже реализовал, сохраняя информацию о каждом поле данных в статическом массиве и сохраняя в объектах только измененные значения.

Мой вопрос: есть ли шаблон, описывающий эту ситуацию? Я предполагаю, что я не первый, кто сталкивается с проблемой создания настраиваемого пользователем класса?

Заранее спасибо. Скажите, если вопрос недостаточно ясен.


person jpfollenius    schedule 20.04.2009    source источник
comment
Определенно не первый, кто спрашивает об этом. Я считаю, что Ruby on Rails позволяет вам настраивать схемы базы данных через файлы конфигурации.   -  person Artelius    schedule 20.04.2009
comment
Я должен использовать Delphi, и я не использую никакую внешнюю базу данных. То, что я хочу, это настраиваемый пользователем класс Delphi (или, по крайней мере, что-то, что ведет себя аналогичным образом)   -  person jpfollenius    schedule 20.04.2009


Ответы (3)


Я быстро просмотрел «Шаблоны архитектуры корпоративных приложений» Мартина Фолвера, и шаблон Отображение метаданных описывает (с первого взгляда) то, что вы описываете.

Отрывок...

«Отображение метаданных позволяет разработчикам определять сопоставления в простой табличной форме, которые затем могут обрабатываться общим кодом для выполнения деталей чтения, вставки и обновления данных».

ХТН

person Nazar    schedule 20.04.2009
comment
Спасибо за этот отличный ответ! К сожалению, описание шаблона на странице Мартина Фаулера очень короткое, и у меня нет его книги. Есть ли бесплатные и более подробные описания этого паттерна? - person jpfollenius; 21.04.2009
comment
Конечно, вы также можете просто купить книгу. Это будет стоить инвестиций. - person Wouter van Nifterick; 21.04.2009
comment
@Nazar: Я посылаю тебе сообщение. Большое спасибо за это очень хорошее предложение! Я подумаю о покупке книги, если она покажется мне полезной. - person jpfollenius; 21.04.2009

Я предлагаю ознакомиться с различными объектно-реляционными шаблонами в книге Мартина Фаулера «Шаблоны архитектуры корпоративных приложений», доступной здесь. Это список шаблонов, которые он охватывает здесь.

Лучше всего для решения вашей проблемы подходит сопоставление метаданных здесь. Есть и другие паттерны, Mapper и т.д.

person RS Conley    schedule 20.04.2009

Обычный способ справиться с этим состоит в том, чтобы класс имел список пользовательских записей, каждая из которых состоит из списка пользовательских полей. Информация о конфигурации для этого может быть легко сохранена в таблице базы данных, содержащей идентификатор типа, тип поля и т. д. Фактические данные затем сохраняются в простой таблице с данными, представленными только в виде пар (objectid + field index)/string - вы преобразовывать строки в и из реального типа при чтении или записи базы данных.

person Community    schedule 20.04.2009
comment
Вот так моя реализация выглядит на данный момент. Мне было интересно, есть ли общие, более элегантные решения. - person jpfollenius; 21.04.2009