Re[30]: ...продолжение
От: Кирилл Лебедев Россия http://askofen.blogspot.com/
Дата: 24.05.07 20:03
Оценка: 2 (1)
Здравствуйте, WolfHound, Вы писали:

WH>Нужно спроектировать модель метаданных, и для примера кнопку и грид.


Резюмируя, можно сформулировать техническое задание в таком виде:

Необходимо разработать графический редактор форм, который будет способен создавать и редактировать формы, сохранять их мето-описание в файлах различных форматов и загружать их из файлов различных форматов. Кроме того, необходимо разработать визуализатор (или конструктор) форм, который способен создавать работающие формы на основе их мето-описания.

Главная полезная функция: Создание, редактирование и визуализация форм.

Для того, чтобы редактировать уже существующую форму редактор форм должен:

  1. Загрузить форму из файла.
  2. Редактировать форму.
  3. Сохранить форму в файле.

Для того, чтобы создать новую форму редактор форм должен:

  1. Создать пустую форму.
  2. Редактировать форму.
  3. Сохранить форму.

Загрузка формы состоит из нескольких операций:



Операция редактирование тоже состоит из нескольких подопераций:

  1. Создание контрола и добавление его к форме.
  2. Удаление контрола (с формы и вообще).
  3. Размещение контрола на форме.
  4. Задание и редактирование визуальных параметров контрола.
  5. Задание обработчика события для контрола.

Для визуализации (отображения) готовой формы в программе визуализатор должен:

  1. Загрузить форму из файла.
  2. Отобразить форму на экране и реагировать на события.

Операция загрузки формы является составной, и она уже была расписана ранее. Описание работы с готовой формой внутри программы выходит за рамки данной задачи. В этом смысле созданная на основе мето-описания форма мало чем отличается от других форм и функционирует, как обычная .NET форма.

Подытоживая, опишем функциональную модель редактора форм (в первом приближении):

  1. Считывание данных формы из файла.
  2. Сохранение данных формы в файле.
  3. Создание пустой формы.
  4. Удаление формы.
  5. Создание контрола.
  6. Удаление контрола.
  7. Добавление контрола к форме.
  8. Удаление контрола из формы.
  9. Размещение контрола на форме.
  10. Размещение всех контролов на форме.
  11. Отображение формы и контролов.
  12. Создание обработчика событий.
  13. Удаление обработчика событий.
  14. Ассоциирование обработчика событий с конкретным контролом.

На основе перечисленных функций, можно выделить такие функциональные группы:

  1. Структурная. К ней относится все то, что связано со структурой (с содержанием контролов внутри формы и внутри других контролов).
  2. Визуальная. Отвечает за создание и визуализацию контролов (за цвет контрола, надпись на кнопочке или картинку).
  3. Топологическая. Отвечает за расположение контролов на форме.
  4. Динамическая. Отвечает за привязку обработчиков событий к конкретным контролам.

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

Так, структурная модель может быть представлена набором записей такого вида:

  1. Parent ID.
  2. ID.

Визуальная модель может быть представлена набором таких записей:

  1. ID.
  2. Type (button, listbox, combobox, checkbox, radiobutton, edit и т.д.).
  3. Text.
  4. Picture.

Топологическая модель может быть представлена структурами:

  1. ID.
  2. X.
  3. Y.
  4. Width.
  5. Height.

Для расположения кнопок на гриде можно использовать вырожденный случай, когда X и Y задают положение ячейки, а Width и Height – всегда равны 1.

Если вырожденный случай не подходит, то топологическая модель для грида может быть такой:

  1. ID.
  2. Col.
  3. Row.

Динамическая модель состоит из набора структур такого вида:

  1. ID.
  2. Handler.

После проведенной нормализации получили мето-описание формы в виде четырех таблиц. Внутренне каждую таблицу в программе можно представить в виде массива структур (не нужны никакие интерфейсы!). Внешне эти таблицы можно представить практически в любом формате – хоть в xml, хоть в базе данных.
С уважением,
Кирилл Лебедев
Software Design blog — http://askofen.blogspot.ru/
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.