WinForms app: Options/Settings (архитектура)
От: Аноним  
Дата: 26.05.11 00:11
Оценка:
Вопрос скорее по архитектуре: мы пишем приложение у которого есть некие настройки (Options/Settings)
Есть сооотвествующие меню и диалоговые окна.

Вопросы:
Как вы такие объекты (Options/Settings) храните, сохраняете, читаете?
Есть ли стандартные механизмы в .NET WinForms?
Как к таким объектам происходит доступ из любой точки приложения, из любого проекта — т.е. они должны быть видисы отовсюда.

Спасибо
Re: WinForms app: Options/Settings (архитектура)
От: Andy77 Ниоткуда  
Дата: 26.05.11 00:51
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Вопрос скорее по архитектуре: мы пишем приложение у которого есть некие настройки (Options/Settings)

А>Есть сооотвествующие меню и диалоговые окна.

А>Вопросы:

А>Как вы такие объекты (Options/Settings) храните, сохраняете, читаете?
А>Есть ли стандартные механизмы в .NET WinForms?
А>Как к таким объектам происходит доступ из любой точки приложения, из любого проекта — т.е. они должны быть видисы отовсюда.

А>Спасибо


Сделай класс настроек, сохраняй куда тебе угодно XmlSerializer'ом (например в AppSettings/AppName), куда уж проще. Встроенными механизмами лучше не пользоваться, ибо они недостаточно гибкие.
Re[2]: WinForms app: Options/Settings (архитектура)
От: Аноним  
Дата: 26.05.11 01:02
Оценка:
Здравствуйте, Andy77, Вы писали:

A>Сделай класс настроек, сохраняй куда тебе угодно XmlSerializer'ом (например в AppSettings/AppName), куда уж проще. Встроенными механизмами лучше не пользоваться, ибо они недостаточно гибкие.


что такое AppSettings/AppName?
Re[3]: WinForms app: Options/Settings (архитектура)
От: Andy77 Ниоткуда  
Дата: 26.05.11 02:18
Оценка:
Здравствуйте, Аноним, Вы писали:

А>что такое AppSettings/AppName?


Я имел в виду Application Data, который обычно находится в "C:\Documents and Settings\username\Application Data\". Чтобы получить путь программно — Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)
Re: WinForms app: Options/Settings (архитектура)
От: Sinix  
Дата: 26.05.11 02:31
Оценка: +2
Здравствуйте, Аноним, Вы писали:

А>Вопросы:

Ответ на все 3: cтандартные settings, по желанию — дополняем своим SettingsProvider.
Re[2]: WinForms app: Options/Settings (архитектура)
От: Andy77 Ниоткуда  
Дата: 26.05.11 03:33
Оценка: +1
Здравствуйте, Sinix, Вы писали:

S>Ответ на все 3: cтандартные settings, по желанию — дополняем своим SettingsProvider.


Я, если честно, до сих пор не понимаю смысла в существовании этого механизма. Пробовал его использовать, наткнулся на дурацкие ограничения и не получил никаких преимуществ, забыл о его существовании. Сохранение настроек у нас и так реализовано проще некуда — одна строчка xml-сериализации, при том, что приложение очень большое и сложное — есть глобальные настройки, настройки пользователя, настройки, специфичные для версии, разные версии плагинов и т.д. Баловство какое-то этот SettingsProvider, по-моему.
Re[3]: WinForms app: Options/Settings (архитектура)
От: Sinix  
Дата: 26.05.11 04:03
Оценка:
Здравствуйте, Andy77, Вы писали:

A>Я, если честно, до сих пор не понимаю смысла в существовании этого механизма.


Оно простое, оно уже реализовано и более-менее работает. Если делать что-то своё, придётся переизобретать кучу вещей.

Кстати, как вам удаётся сохранять и локальные и глобальные настройки одной строчкой?
Re[4]: WinForms app: Options/Settings (архитектура)
От: Аноним  
Дата: 26.05.11 04:43
Оценка:
Здравствуйте, Sinix, Вы писали:

A>>Я, если честно, до сих пор не понимаю смысла в существовании этого механизма.


S>Оно простое, оно уже реализовано и более-менее работает. Если делать что-то своё, придётся переизобретать кучу вещей.


S>Кстати, как вам удаётся сохранять и локальные и глобальные настройки одной строчкой?


Что такое локальные и что такое глобальные настройки?
Re[5]: WinForms app: Options/Settings (архитектура)
От: Sinix  
Дата: 26.05.11 04:58
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Что такое локальные и что такое глобальные настройки?


Сохранение настроек у нас и так реализовано проще некуда — одна строчка xml-сериализации, при том, что приложение очень большое и сложное — есть глобальные настройки, настройки пользователя (=локальные — Sinix)
...

Re[4]: WinForms app: Options/Settings (архитектура)
От: Andy77 Ниоткуда  
Дата: 26.05.11 05:38
Оценка:
Здравствуйте, Sinix, Вы писали:

S>Оно простое, оно уже реализовано и более-менее работает. Если делать что-то своё, придётся переизобретать кучу вещей.


Да там же шаг влево, шаг вправо — и расстрел А что придется переизобретать, кстати? У нас все сделано "в лоб", абсолютно просто и предсказуемо. Может, я что-то пропустил и даже об этом не догадываюсь?

S>Кстати, как вам удаётся сохранять и локальные и глобальные настройки одной строчкой?


Да это я уже заговариваюсь, нет у нас никаких локальных-глобальных, точнее, есть настройки, специфичные для всех версий плагина и отдельно для каждой версии. В основном сохранение-чтение выливается в один вызов хелпера XmlUtils.Serialize(AppFolders.GetPluginDataFolder("PowerPack"), GetSettings()). Куда уж проще?
Re[6]: WinForms app: Options/Settings (архитектура)
От: Andy77 Ниоткуда  
Дата: 26.05.11 05:42
Оценка: :)
Здравствуйте, Sinix, Вы писали:

S>

S>Сохранение настроек у нас и так реализовано проще некуда — одна строчка xml-сериализации, при том, что приложение очень большое и сложное — есть глобальные настройки, настройки пользователя (=локальные — Sinix)
S>...


О, точно, есть у нас и глобальные настройки, а я уже успел забыть за полчаса, спасибо за напоминание, Sinix! Всё, пора идти спать
Re[5]: WinForms app: Options/Settings (архитектура)
От: Sinix  
Дата: 26.05.11 05:46
Оценка:
Здравствуйте, Andy77, Вы писали:

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

XmlUtils.Serialize(AppFolders.GetPluginDataFolder("PowerPack"), GetSettings()). Куда уж проще?

А, тогда всё действительно просто. А вот когда надо управлять настройкамии как политикой, сохранять только фактически изменённые настроки или менять провайдеров — вот тут проще не переизобретать своё.
Re[6]: WinForms app: Options/Settings (архитектура)
От: Nikolay_P_I  
Дата: 26.05.11 05:55
Оценка:
Здравствуйте, Sinix, Вы писали:

S>А, тогда всё действительно просто. А вот когда надо управлять настройкамии как политикой, сохранять только фактически изменённые настроки или менять провайдеров — вот тут проще не переизобретать своё.


А зачем оно ? Можно примеров из практики ? Работаем как и предыдущий оратор — никаких проблем, а с подходом от MS — полный рот.
Re[6]: WinForms app: Options/Settings (архитектура)
От: Andy77 Ниоткуда  
Дата: 26.05.11 05:59
Оценка: +1
Здравствуйте, Sinix, Вы писали:

S>А, тогда всё действительно просто. А вот когда надо управлять настройкамии как политикой, сохранять только фактически изменённые настроки или менять провайдеров — вот тут проще не переизобретать своё.


Сохранять только фактически измененные настройки мы умеем, написали хелпер, который через рефлекшн сравнивает настройки с эталоном. Это всё равно полезная была вещь, которая и в других местах применяется. А с управлением настройками как политикой, к счастью, нам связываться не приходилось. Ты с этим сталкивался? Можешь привести пример?

В общем, я думаю, для обычного десктоп-приложения, как у автора, за глаза хватает xml-сериализатора. Править легко, кодировать легко, мигрировать легко, файловой системой все умеют пользоваться, полная свобода действий.
Re[7]: WinForms app: Options/Settings (архитектура)
От: Nikolay_P_I  
Дата: 26.05.11 06:50
Оценка:
Здравствуйте, Andy77, Вы писали:

A>Сохранять только фактически измененные настройки мы умеем


А зачем оно ? Побочный артифакт от MVVM и прочих binding-архитектур ?
Re[7]: WinForms app: Options/Settings (архитектура)
От: Sinix  
Дата: 26.05.11 08:18
Оценка:
Здравствуйте, Andy77, Вы писали:

A> А с управлением настройками как политикой, к счастью, нам связываться не приходилось. Ты с этим сталкивался? Можешь привести пример?


Могу. Типовая задача — часть настроек должны задаваться администратором, часть из них может переопределяться пользователями. Решается хранением настроек в общей базе + прослойкой из view/sp, которые отдают настройки для текущего поользователя.
Re[6]: WinForms app: Options/Settings (архитектура)
От: Аноним  
Дата: 26.05.11 12:41
Оценка:
Здравствуйте, Sinix, Вы писали:


S>

S>Сохранение настроек у нас и так реализовано проще некуда — одна строчка xml-сериализации, при том, что приложение очень большое и сложное — есть глобальные настройки, настройки пользователя (=локальные — Sinix)
S>...


Ты можешь пример привести?

у нам все настройки — настройки пользователя. Что такое "глобальные настройки"? То, что в app.config сидит?
Ты можешь привести пример?
Re[7]: WinForms app: Options/Settings (архитектура)
От: Sinix  
Дата: 26.05.11 13:01
Оценка:
Здравствуйте, Аноним, Вы писали:

А>у нам все настройки — настройки пользователя. Что такое "глобальные настройки"? То, что в app.config сидит?

Грубо говоря, настройки, определяемые разработчиками/администратором.

А>Ты можешь привести пример?

Неа Слишком специфичные примеры в основном. Если брать что-то универсальное,то это будут адреса серверов, таймауты, имена временных папок, настройки трассировки и т.д и т.п.
Re[8]: WinForms app: Options/Settings (архитектура)
От: Аноним  
Дата: 26.05.11 13:25
Оценка: +1
Здравствуйте, Sinix, Вы писали:


А>>у нам все настройки — настройки пользователя. Что такое "глобальные настройки"? То, что в app.config сидит?

S>Грубо говоря, настройки, определяемые разработчиками/администратором.

А>>Ты можешь привести пример?

S>Неа Слишком специфичные примеры в основном. Если брать что-то универсальное,то это будут адреса серверов, таймауты, имена временных папок, настройки трассировки и т.д и т.п.

Понятно, спасибо. Короче то, что редко менчется. У нас для простоты это просто в app.config
Re[8]: WinForms app: Options/Settings (архитектура)
От: Andy77 Ниоткуда  
Дата: 26.05.11 14:48
Оценка:
Здравствуйте, Nikolay_P_I, Вы писали:

N_P>А зачем оно ? Побочный артифакт от MVVM и прочих binding-архитектур ?


Нет (к слову, не скажу, что я фанат MVVM). Покажу на примере spreadsheet — зачастую приходится мержить настройки, определенные пользователем для всей колонки (часть этих настроек — цвет фона), с настройками, определенными для определенной ячейки; в этом случае настройки ячейки имеют приоритет. Легче всего этого добиться, сохраняя в ячейке только измененные настройки.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.