none
XML рекомендации по составлению файла настроек программы RRS feed

  • Вопрос

  • Использую C#, XML, LINQ

    Ребят, привет!

    Подскажите, может есть статья, подобная "100 рекомендаций по стилю написания программ на языке Х", только применимая к составлению файла формата xml? В том числе применительно к xml файлам настройкам.

    Хотел бы правильно составить xml-файл, чтобы было стандартизированное оформление, чтобы можно было удобно работать с ним (считывать/записывать/удалять значения).. Может какой-нибудь паттерн подскажите.

    На данный момент есть такое:

    <?xml version="1.0" encoding="utf-8"?>
    
    <Settings>
    
    <RootNode1>
    	<MyNode param="" value=""/>
    </RootNode1>
    <RootNode2>
    	<SubNode1>
    		<MyNode2 Name="" Description=""/>
    		<MyNode2 Name="" Description=""/>
    	</SubNode1>
    	<SubNode2>
    		<MyNode3 Name="" Description=""/>
    		<MyNode3 Name="" Description=""/>
    	</SubNode2>
    </RootNode2>
    <AppConfig>
    	<setting Name="MinimizeToTray" Value="False"/>
    	<setting Name="PathToFolder" Value=""/>
    	<setting Name="Timer" Value="2"/>
    </AppConfig>
    </Settings>

    Хотелось бы понять, как принято хранить данные в xml. Большинство данных у меня хранится в атрибутах. Это делает текст настроек более читабельным. 

    Вижу часто практикуется так:

    <setting Name="MinimizeToTray">
    <Value></Value>
    </setting>

    Но я отказался от этого варианта в пользу читабельности. Теперь сижу думаю, а верно ли...

    Что в моих настройках будет хранится: размеры окна, его последнее положение, пользовательские настройки, данные по умолчанию для восстанавления параметров приложения и прочее. Есть ли смысл лепить эти все данные в один файл или их как-то следует разделять по разным конфигам?

    В общем, расскажите про практики, кто как делает, как принято.  


    • Изменено kremlinbot 25 марта 2016 г. 23:12
    25 марта 2016 г. 23:10

Ответы

Все ответы

  • Хм. Посмотрите сайт XML Design Patterns.

    • Помечено в качестве ответа kremlinbot 5 апреля 2016 г. 16:47
    31 марта 2016 г. 15:05
  • Добрый день.

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

    1 апреля 2016 г. 8:18
    Отвечающий
  • Добрый день.

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

    Алексей, спасибо за ответ! Я не уточнил - файл с настройками храню в папке Username\AppData\Roaming\MyApp\Settings.xml . Я хочу настройки приложения сделать персонализированными, т.е. для каждого пользователя свои. Также стремлюсь сделать работу программы корректной при настроенном перемещаемом профиле пользователя в домене. 

    Хранение конфига в Username\AppData\Roaming - универсальное в данном случае решение: конфиг скрыт от глаз пользователя, он всегда доступен - в случае обычного и перемещаемого профиля, настройки персонализированы.

    В статье, которую Вы посоветовали, описано решение, когда автоматом создается .config рядом с исполняемым файлом программы .exe, и  и в нем хранятся настройки приложения. Мне немного это решение не подходит: 1) настройки не персонализированы - программа берет значения из 1 общего файла для каждого пользователя; 2) файл доступен для ручной правки (не спрятан от пользователя); 3) программа может располагаться в ProgramFiles и, если она будет запущена пользователем, работающем без прав администратора, у нее не будет доступа, чтобы изменить файл. Считать, да. А изменить - нет. 

    Надеюсь, я правильно трактовал раздел "Файлы конфигурации приложений" в статье :)

    4 апреля 2016 г. 22:13
  • А п.2 ваших верных, на самом то деле, возражений не применим разве к предлагаемому вами же варианту с папкой Username\AppData\Roaming?  
    5 апреля 2016 г. 6:48
  • В таком случае, самый простой вариант, сделайте класс со свойствами которые вам нужны для сохранения настроек и пользуйтесь XML сериализацией/десиарилизацией для сохранения этого добра в произвольное место.
    5 апреля 2016 г. 7:00
    Отвечающий
  • А п.2 ваших верных, на самом то деле, возражений не применим разве к предлагаемому вами же варианту с папкой Username\AppData\Roaming?  
    Применим. Но тут меньшее зло :) Пользователю придется постараться, чтобы найти конфиг и внести изменения в него вручную. Разметку XML легко повредить, легко внести некорректные данные и при считывании какой-либо настройки во время работы программы, будет exception.
    5 апреля 2016 г. 9:42
  • В таком случае, самый простой вариант, сделайте класс со свойствами которые вам нужны для сохранения настроек и пользуйтесь XML сериализацией/десиарилизацией для сохранения этого добра в произвольное место.
    Я отказался от сериализации/десеарилизации XML в пользу Linq. Petalvik предложил паттерны. Наверно, выберу один из них и реализую свой класс. Я как раз это и искал: паттерн + реализацию класса. Думал может уже готовое, стандартизированное есть (для упрощения сопровождения другими разработчиками) и не надо изобретать велосипед :)
    5 апреля 2016 г. 9:50
  • Дело ваше. Когда у вас программа может иметь класс который однозначно отражает конфиг, и вместо этого использовать PLinq... Я бы использовал сериализацию...
    5 апреля 2016 г. 10:22
    Отвечающий
  • Вы обязаны уметь взлетать в отсутствие валидного конфига. Вне зависимости от того, где вы его храните.


    5 апреля 2016 г. 14:57