Пишу класс — менеджер визуальных свойств контрола. Этот класс будет хранить информацию о шрифте, цвете текста, цвете фона и подобных вещах. В приложении есть несколько контролов (одного типа), но с разными свойствами. Как лучше написать интерфейс для доступа и установки свойств ?
То есть в первом случае для каждого контрола свой отдельный интерфейс, во втором все делается через идентификатор. В первом более понятно, во втором надо иметь дело с enum и не забывать для какого контрола (идентификатора) выставляешь или запрашиваешь свойства.
Спасибо
Re: Вопрос по дизайну класса
От:
Аноним
Дата:
05.11.05 14:44
Оценка:
Здравствуйте, Аноним, Вы писали:
А почему нельзя сделать по-простому:
Здравствуйте, Аноним, Вы писали:
А>Пишу класс — менеджер визуальных свойств контрола. Этот класс будет хранить информацию о шрифте, цвете текста, цвете фона и подобных вещах. В приложении есть несколько контролов (одного типа), но с разными свойствами. Как лучше написать интерфейс для доступа и установки свойств ?
А>Example 1.
А>То есть в первом случае для каждого контрола свой отдельный интерфейс, во втором все делается через идентификатор. В первом более понятно, во втором надо иметь дело с enum и не забывать для какого контрола (идентификатора) выставляешь или запрашиваешь свойства.
А>Спасибо
Хех, оба варианта в топку, так как при добавлении нового контрола придется менять интерфейс ViewManagera.
Мне кажется логичней было бы хранить свойства прямо к контроле, за каким то общим интерфейсом или еще как.
Re[2]: Вопрос по дизайну класса
От:
Аноним
Дата:
05.11.05 15:28
Оценка:
Здравствуйте, Аноним, Вы писали:
А> COLORREF m_crControl; А>} А>[/ccode] А>и создать N объектов класса.
Ситауция такая. Настройки все хранятся в базе данных. При загрузке программы менеджер читает все настройки, для всех видов контролов и читает один раз. Затем просто разные части программы запрашивают у него свои настройки.
Вот представтье простой диалог, на нем лист бокс. Для этого лист бокса свои настройки представления. Из меню из этого диалога можно открывать еще три — четыре разных дочерних диалога, на каждом контрол лист бокс, у каждого из контрола свои настройки представления.
Если делать по одному объекту на каждый контрол, то будет большой труд отслеживать кто что создал, какие настройки загружать для какого контрола. Опять же в базу постоянно лазить.
А так , менеджер представления — Singleton паттерн. Когда запускается очередной диалог, но у этого менеджера запросит свои настройки и все.
Но вместо enum'ов идентифицировать контролы по их хэндлам.
И не делать статического массива m_crControls, а добавить спец. фунции для динамического добавления/удаления контролов.
Здравствуйте, Аноним, Вы писали:
А>Пишу класс — менеджер визуальных свойств контрола. Этот класс будет хранить информацию о шрифте, цвете текста, цвете фона и подобных вещах. В приложении есть несколько контролов (одного типа), но с разными свойствами. Как лучше написать интерфейс для доступа и установки свойств ?
Вся информация о шрифтах, цвете текста и фона доступна через функции операционной системы. Все стандартные контролы автоматически используют системные цвета, шрифты и размеры, заданные пользователем. Разработчику приложения незачем вмешиваться в это.
Здравствуйте, Centaur, Вы писали:
C>Здравствуйте, Аноним, Вы писали:
А>>Пишу класс — менеджер визуальных свойств контрола. Этот класс будет хранить информацию о шрифте, цвете текста, цвете фона и подобных вещах. В приложении есть несколько контролов (одного типа), но с разными свойствами. Как лучше написать интерфейс для доступа и установки свойств ?
C>Вся информация о шрифтах, цвете текста и фона доступна через функции операционной системы. Все стандартные контролы автоматически используют системные цвета, шрифты и размеры, заданные пользователем. Разработчику приложения незачем вмешиваться в это.
Бред!!! Всегда должна быть возможность настраивать те или иные параметры контрола, например то же шрифт.
Re[3]: Вопрос по дизайну класса
От:
Аноним
Дата:
05.11.05 19:14
Оценка:
Здравствуйте, megawatt, Вы писали:
M>Бред!!! Всегда должна быть возможность настраивать те или иные параметры контрола, например то же шрифт.
об этом и речь контрол самописный, полностью конфигурируемый
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Аноним, Вы писали:
А>> COLORREF m_crControl; А>>} А>>[/ccode] А>>и создать N объектов класса.
А>Ситауция такая. Настройки все хранятся в базе данных. При загрузке программы менеджер читает все настройки, для всех видов контролов и читает один раз. Затем просто разные части программы запрашивают у него свои настройки.
А>Вот представтье простой диалог, на нем лист бокс. Для этого лист бокса свои настройки представления. Из меню из этого диалога можно открывать еще три — четыре разных дочерних диалога, на каждом контрол лист бокс, у каждого из контрола свои настройки представления.
А>Если делать по одному объекту на каждый контрол, то будет большой труд отслеживать кто что создал, какие настройки загружать для какого контрола. Опять же в базу постоянно лазить.
А>А так , менеджер представления — Singleton паттерн. Когда запускается очередной диалог, но у этого менеджера запросит свои настройки и все.
По-моему в данном случае лучше подойдет паттерн flyweight. В классике GoF этот паттерн иллюстрируется примером текстового редактора.
Допустим имеется ограниченное число разновидностей объектов — алфавит букв. Заманчивая идея представить каждую букву в виде экземпляра одного из классов "буква А" или "буква Б" и т.д. Однако таких объектов было бы слишком много при том что все они одинаковые по сути (начертание буквы) и отличаются только контекстом (где размещается и какого размера). Идея flyweight в том, чтобы создать пул объектов "букв" (по одному экземпляру на класс) и исключить из классов информацию о контексте, т.е. передавать контекст в методы классов в качестве параметров.
Здравствуйте, Аноним, Вы писали:
M>>Бред!!! Всегда должна быть возможность настраивать те или иные параметры контрола, например то же шрифт.
Шрифт — может быть, в редких случаях.
А>об этом и речь контрол самописный, полностью конфигурируемый
Если контрол самописный, он должен определиться, на какой стандартный контрол он хочет быть похож, и брать цвета с него. Не так много контролов, которые нельзя свести к прототипам «окно» или «кнопка».
Re[5]: Вопрос по дизайну класса
От:
Аноним
Дата:
05.11.05 23:10
Оценка:
Здравствуйте, Centaur, Вы писали:
C>Здравствуйте, Аноним, Вы писали:
M>>>Бред!!! Всегда должна быть возможность настраивать те или иные параметры контрола, например то же шрифт.
C>Шрифт — может быть, в редких случаях.
А>>об этом и речь контрол самописный, полностью конфигурируемый
C>Если контрол самописный, он должен определиться, на какой стандартный контрол он хочет быть похож, и брать цвета с него. Не так много контролов, которые нельзя свести к прототипам «окно» или «кнопка».
да не надо привязыватся на слово control. Это область, со своими параметрами. Параметры хранятся в базе данных. Таких областей несколько и у всех разне параметры. Кроме шрифта хранится еще расположение окна на экране, звуковые параметры (alerts) и много чего еще.
Здравствуйте, Аноним, Вы писали:
А>Пишу класс — менеджер визуальных свойств контрола. Этот класс будет хранить информацию о шрифте, цвете текста, цвете фона и подобных вещах. В приложении есть несколько контролов (одного типа), но с разными свойствами. Как лучше написать интерфейс для доступа и установки свойств ?
А>Example 1.
А>То есть в первом случае для каждого контрола свой отдельный интерфейс, во втором все делается через идентификатор. В первом более понятно, во втором надо иметь дело с enum и не забывать для какого контрола (идентификатора) выставляешь или запрашиваешь свойства.
А>Спасибо
Может хватит списка обьектов COLORREF(Ближе ко второму варианту)?
Здравствуйте, Аноним, Вы писали:
А>То есть в первом случае для каждого контрола свой отдельный интерфейс, во втором все делается через идентификатор. В первом более понятно, во втором надо иметь дело с enum и не забывать для какого контрола (идентификатора) выставляешь или запрашиваешь свойства.
Только я бы предложил ещё больше абстрагироваться.
Завести абстрактное хранилище свойств контрола, в котором будут методы Set/Get для любого нужного свойства, и которое умеет себя сохранять/считывать в/из строки БД.
Ну а во ViewManager просто предоставлять доступ к этому объекту по строке.
С уваженеим, Erop
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском