Каковы хорошие способы управления настройками в приложениях с графическим интерфейсом?

Если у меня есть настройка, доступная через пункт меню или окно конфигурации, которое может измениться во время выполнения, например, «жирный текст вкл/выкл»; Каковы некоторые хорошие способы убедиться, что все применимые компоненты знают о значении этого параметра?


person Markus Jevring    schedule 21.01.2010    source источник
comment
С каким языком вы имеете дело?   -  person Clutch    schedule 21.01.2010
comment
Java, но я не думаю, что это действительно важно. Если есть механизмы, которые хороши в других языках, возможно, мне следует подражать им в том, который я использую.   -  person Markus Jevring    schedule 22.01.2010


Ответы (2)


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

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

person DVK    schedule 21.01.2010
comment
Как тогда вы будете контролировать эту регистрацию слушателя? Будет ли у вас какой-нибудь глобально доступный EventHandlerService, с которым все будет регистрироваться? Нецелесообразно передавать ссылку на это всем компонентам, которым это может понадобиться. - person Markus Jevring; 22.01.2010
comment
У меня сильное искушение заявить, что служба обработчика событий будет статическим глобальным объектом, но я почти уверен, что есть лучший шаблон, который я просто сейчас не вспомню. - person DVK; 22.01.2010

Если будет много настроек, я внедрил базу данных sqlite для хранения изменений для меньшего количества изменений, пара ключ-значение в файле достаточно хороша. Затем реализуйте шаблон проектирования наблюдателя, чтобы при внесении любых изменений вызывался список классов графического интерфейса для внесения изменений.

person Clutch    schedule 21.01.2010
comment
Как бы вы управляли ссылками с наблюдателем? Когда компоненты регистрируются как наблюдатели, что они регистрируют? Вы бы сделали это глобальным или передали его компонентам? Если вы проходите дальше, создаете ли вы все свои компоненты из одного и того же места? - person Markus Jevring; 22.01.2010