Здравствуйте, WolfHound, Вы писали:
WH>Нужно спроектировать модель метаданных, и для примера кнопку и грид.
Резюмируя, можно сформулировать
техническое задание в таком виде:
Необходимо разработать графический редактор форм, который будет способен создавать и редактировать формы, сохранять их мето-описание в файлах различных форматов и загружать их из файлов различных форматов. Кроме того, необходимо разработать визуализатор (или конструктор) форм, который способен создавать работающие формы на основе их мето-описания.
Главная полезная функция: Создание, редактирование и визуализация форм.
Для того, чтобы редактировать уже существующую форму редактор форм должен:
Загрузить форму из файла.
Редактировать форму.
Сохранить форму в файле.
Для того, чтобы создать новую форму редактор форм должен:
Создать пустую форму.
Редактировать форму.
Сохранить форму.
Загрузка формы состоит из нескольких операций:
Считывание данных формы из файла.
Создание пустой формы.
Создание и добавление контролов к форме.
Размещение контролов на форме в соответствии с заданным порядком.
Отображение (визуализация) формы и контролов.
Ассоциация обработчиков событий с контролами.
Операция редактирование тоже состоит из нескольких подопераций:
Создание контрола и добавление его к форме.
Удаление контрола (с формы и вообще).
Размещение контрола на форме.
Задание и редактирование визуальных параметров контрола.
Задание обработчика события для контрола.
Для визуализации (отображения) готовой формы в программе визуализатор должен:
Загрузить форму из файла.
Отобразить форму на экране и реагировать на события.
Операция загрузки формы является составной, и она уже была расписана ранее. Описание работы с готовой формой внутри программы выходит за рамки данной задачи. В этом смысле созданная на основе мето-описания форма мало чем отличается от других форм и функционирует, как обычная .NET форма.
Подытоживая, опишем функциональную модель редактора форм (в первом приближении):
Считывание данных формы из файла.
Сохранение данных формы в файле.
Создание пустой формы.
Удаление формы.
Создание контрола.
Удаление контрола.
Добавление контрола к форме.
Удаление контрола из формы.
Размещение контрола на форме.
Размещение всех контролов на форме.
Отображение формы и контролов.
Создание обработчика событий.
Удаление обработчика событий.
Ассоциирование обработчика событий с конкретным контролом.
На основе перечисленных функций, можно выделить такие функциональные группы:
Структурная. К ней относится все то, что связано со структурой (с содержанием контролов внутри формы и внутри других контролов).
Визуальная. Отвечает за создание и визуализацию контролов (за цвет контрола, надпись на кнопочке или картинку).
Топологическая. Отвечает за расположение контролов на форме.
Динамическая. Отвечает за привязку обработчиков событий к конкретным контролам.
Соответственно, на основе каждой из этих групп можно создать модель представления формы. Полностью форма представляется четырьмя моделями.
Так,
структурная модель может быть представлена набором записей такого вида:
Parent ID.
ID.
Визуальная модель может быть представлена набором таких записей:
ID.
Type (button, listbox, combobox, checkbox, radiobutton, edit и т.д.).
Text.
Picture.
Топологическая модель может быть представлена структурами:
ID.
X.
Y.
Width.
Height.
Для расположения кнопок на гриде можно использовать вырожденный случай, когда X и Y задают положение ячейки, а Width и Height – всегда равны 1.
Если вырожденный случай не подходит, то топологическая модель для грида может быть такой:
ID.
Col.
Row.
Динамическая модель состоит из набора структур такого вида:
ID.
Handler.
После проведенной нормализации получили мето-описание формы в виде четырех таблиц. Внутренне каждую таблицу в программе можно представить в виде массива структур (не нужны никакие интерфейсы!). Внешне эти таблицы можно представить практически в любом формате – хоть в xml, хоть в базе данных.