Где хранить настройки программы

Самый оптимальный вариант хранения настроек php приложения. В примерах для начинающих разработчиков, конфигурация приложения задаётся в начале исполняемого файла. Но для серьёзного Web приложения с множеством настроек такой вид конфигурации не удобен.

Рассмотрим на простом примере как оптимизировать хранение настроек приложения.

Создадим файл index.php со следующим содержимым:

C#, способы хранения настроек программы

В интернете приведено очень много способов хранения настроек программы, но все они как-то разбросаны, поэтому я решил их собрать вместе и расписать, как этим пользоваться.

C# и app.config

На хабре уже была посвящена этому тема, поэтому… перейти

C# и Properties.Settings

Информация о Properties.Settings

Организация Properties.Settings — это обычный xml файл, который можно найти в папке пользователя:

С: Users [user name] AppData Local [ (Project Name) or (AssemblyCompany) ] [name project_cashBuild] [AssemblyVersion] user.config

Как сохранить все настройки windows 10 и перенести их на другой компьютер

Для начала нам нужно создать такие переменные для Properties.Settings. Перейдем в Properties -> Settings.settings:

Properties -> Settings.settings in VS 2013

Я создал 3-и переменные и выбрал область их использования: 2- область пользователь и 1- приложение.

Различие между областями просты. Область приложения можно только читать, а пользователь — изменять и читать.

Вернемся к переменным:

  • Version — версия нашей программы. Определил ее строкой и областью приложение. Т.к. версия может содержать буквы (например, b — от beta). А область выбрал, чтоб не менялась наша версия приложения (т.к. AssemblyVersion редко кто использует).
  • Save_text — это переменная, куда мы будем сохранять наш текст.
  • open_sum — сколько раз мы открыли программу.

Код Form1.cs

namespace Habrahabr < public partial class Form1 : Form < public Form1() < InitializeComponent(); this.Text += » » + Properties.Settings.Default.Version; //Добавляем в название программы, версию. Properties.Settings.Default.open_sum++; //Добавляем +1 к кол-ву запусков программы. label2.Text = Properties.Settings.Default.open_sum.ToString(); //выводим в Label2 кол-во запусков программы. richTextBox1.Text = Properties.Settings.Default.Save_text; // Загружаем ранее сохраненный текст Properties.Settings.Default.Save(); // Сохраняем переменные. >private void button1_Click(object sender, EventArgs e) < Properties.Settings.Default.Save_text = richTextBox1.Text; // Записываем содержимое richTextBox1 в Save_text Properties.Settings.Default.Save(); // Сохраняем переменные. MessageBox.Show(«Текст сохранен», «Информация», MessageBoxButtons.OK, MessageBoxIcon.Asterisk); // Говорим пользователю, что сохранили текст. >> >

Результаты работы программы

Как сохранить настройки или данные в приложении C#?

Первый запуск, мы видим, что кол-во запусков равно 1. И теста в richTextBox1 нет.

Теперь напишем и сохраним текст.

При втором запуске мы видим, что текст сохранен, и кол-во запусков уже 2-ва.

Очень удобно использовать этот объект, если надо работать в разных областях видимости в одном проекте. Метод хорош, когда вам не надо, чтоб рядовой пользователь рылся в файлах настройки программы.

C# и ini-файлы

С ini-файлами все на оборот, они лежат в папке рядом с программой, что позволяет пользователю изменить настройки вне-программы. Данный способ хорош, если настройки программы заносятся вручную. Например, эмулятор для запуска игры без лицензии (тотже revLoader).

Теперь перейдем к нашей теме. Для работы с таким типом файлов, нам нужно создать класс по работе с ним. Создаем класс, например «IniFile», подключаем пространство имен, которых нет:

using System.IO; using System.Reflection; using System.Runtime.InteropServices; using System.Text;

А теперь разбираем по-порядку:

Код IniFiles.cs

using System.IO; using System.Reflection; using System.Runtime.InteropServices; using System.Text; namespace IniFiles < class IniFile < string Path; //Имя файла. [DllImport(«kernel32»)] // Подключаем kernel32.dll и описываем его функцию WritePrivateProfilesString static extern long WritePrivateProfileString(string Section, string Key, string Value, string FilePath); [DllImport(«kernel32»)] // Еще раз подключаем kernel32.dll, а теперь описываем функцию GetPrivateProfileString static extern int GetPrivateProfileString(string Section, string Key, string Default, StringBuilder RetVal, int Size, string FilePath); // С помощью конструктора записываем пусть до файла и его имя. public IniFile(string IniPath) < Path = new FileInfo(IniPath).FullName.ToString(); >//Читаем ini-файл и возвращаем значение указного ключа из заданной секции. public string ReadINI(string Section, string Key) < var RetVal = new StringBuilder(255); GetPrivateProfileString(Section, Key, «», RetVal, 255, Path); return RetVal.ToString(); >//Записываем в ini-файл. Запись происходит в выбранную секцию в выбранный ключ. public void Write(string Section, string Key, string Value) < WritePrivateProfileString(Section, Key, Value, Path); >//Удаляем ключ из выбранной секции. public void DeleteKey(string Key, string Section = null) < Write(Section, Key, null); >//Удаляем выбранную секцию public void DeleteSection(string Section = null) < Write(Section, null, null); >//Проверяем, есть ли такой ключ, в этой секции public bool KeyExists(string Key, string Section = null) < return ReadINI(Section, Key).Length >0; > > >

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

Теперь переходим в основную программу.

Код Form1.cs

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace IniFiles < public partial class Form1 : Form < IniFile INI = new IniFile(«config.ini»); public Form1() < InitializeComponent(); auto_read(); >private void auto_read() < if (INI.KeyExistsINI(«SettingForm1», «Width»)) numericUpDown2.Value = int.Parse(INI.ReadINI(«SettingForm1», «Height»)); else numericUpDown1.Value = this.MinimumSize.Height; if (INI.KeyExistsINI(«SettingForm1», «Height»)) numericUpDown1.Value = int.Parse(INI.ReadINI(«SettingForm1», «Width»)); else numericUpDown2.Value = this.MinimumSize.Width; if (INI.KeyExistsINI(«SettingForm1», «Width»)) textBox1.Text = INI.ReadINI(«Other», «Text»); this.Height = int.Parse(numericUpDown1.Value.ToString()); this.Width = int.Parse(numericUpDown2.Value.ToString()); >private void button1_Click(object sender, EventArgs e) < INI.WriteINI(«SettingForm1», «Height», numericUpDown2.Value.ToString()); INI.WriteINI(«SettingForm1», «Width», numericUpDown1.Value.ToString()); INI.WriteINI(«Other», «Text», textBox1.Text); MessageBox.Show(«Настройки SettingForm1 и Other сохранены», «Информация», MessageBoxButtons.OK, MessageBoxIcon.Asterisk); // Говорим пользователю, что сохранили текст. >private void button2_Click(object sender, EventArgs e) < auto_read(); // Чтоб не повторяться. >private void button3_Click(object sender, EventArgs e) < INI.WriteINI(«SettingForm1», «Height», numericUpDown2.Value.ToString()); INI.WriteINI(«SettingForm1», «Width», numericUpDown1.Value.ToString()); this.Height = int.Parse(numericUpDown1.Value.ToString()); this.Width = int.Parse(numericUpDown2.Value.ToString()); MessageBox.Show(«Настройки SettingForm1 сохранены и применены», «Информация», MessageBoxButtons.OK, MessageBoxIcon.Asterisk); // Говорим пользователю, что сохранили текст. >> >

Результаты работы программы

При первом запуска, у нас нет файла config.ini. Поэтому при проверке возвращаются fasle и мы приравниваем окно к минимальным параметрам.

Меняем параметры окна и жмем «Применить»

Редактируем файл config.ini руками и жмем загрузить.

На этом все, в следующий раз опишу работу с xml файлами и с бинарными файлами.

Источник: habr.com

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

Аннотация: В данной лекции описывается, как осмысленно выбрать место для хранения настроек приложений, как определять наилучшее место для хранения различных типов пользовательских настроек, как принимать решение о том, где хранить XML-данные и выбирать место для хранения файлов внешних приложений

Ключевые слова: RDL

С появлением усовершенствованных в отношении производительности и более гибких ядер баз данных, как, скажем, в Microsoft SQL Server 2005, размывается граница между теми объектами, которые следует хранить в базах данных, и теми, которые хранить в них не следует. Раньше базы данных хорошо подходили для хранения только структурированных данных. Однако благодаря недавним достижениям в сфере технологий механизмов баз данных становится все более простым и более выполнимым хранение в базе данных и неструктурированных данных, таких, как документы и изображения. Хранить ли в базе данных все или только некоторые из данных внешних приложений, зависит от того, как эти данные используются.

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

Где хранить настройки приложений

В программировании на платформе .NET для хранения данных приложений обычно используются XML-документы (обычно с расширением . config ). Если необходимо, чтобы приложение демонстрировало различное поведение в разных ситуациях, возникают сложности. Необходимо либо предусмотреть это в файле конфигурации, либо рассмотреть вариант с применением архитектуры параметров, управляемых данными, при которой для настройки приложения используются данные. Если вы выберете последнее решение, то база данных будет естественным местом для хранения данных, которые управляют настройками приложения.

Прежде чем выбрать модель управления настройками с помощью данных, следует сначала учесть некоторые доводы в пользу использования в приложении конфигурационных файлов. Если ваше приложение не нуждается в базе данных для какой-либо еще функции, возможно, не стоит включать в приложение базу данных только для параметров приложения. Аналогично, если приложение нуждается в параметрах уже в процессе загрузки, а на этом этапе процесса база данных обычно недоступна, то конфигурационный файл будет более естественным решением. (Раньше параметры приложения в подобных ситуациях обычно хранились в реестре Windows, но сейчас они чаще хранятся в конфигурационных файлах приложения.) Одним из главных преимуществ хранения параметров конфигурации приложения в файле является то, что этим файлом с легкостью могут манипулировать пользователи. XML-файл можно редактировать в Блокноте, поэтому любой пользователь может изменить параметры. Если необходимо предотвратить просмотр или изменение уязвимых настроек пользователями, то файлы конфигурации можно зашифровать.

Читайте также:
Как разблокировать программу которую заблокировал администратор

Несмотря на недоступность в процессе запуска приложения, хранение параметров приложения в базе данных может быть выгодным. В базе данных можно управлять доступом к параметрам при помощи политики безопасности базы, в том числе, используя шифрование в SQL Server 2005.

Это не даст пользователям, которые, возможно, не вполне представляют себе последствия сделанных изменений, возможности изменить параметры. Если вы используете какой-либо вариант ролевой модели безопасности (см. лекции 2-3), можно контролировать, кому предоставляется возможность изменять отдельные параметры приложения.

Сохранение параметров приложения в базе данных будет также очень полезно в распределенных приложениях. Таким образом, вы сможете хранить такие разные параметры, как часовой пояс или офисные правила, в одном месте — базе данных. Эти параметры можно настроить так, чтобы приложение хранило различные версии настроек для разных пользователей или групп пользователей, а контролировать параметры смогут сотрудники, имеющие достаточную квалификацию. В табл. 1.1 показаны преимущества, предлагаемые каждым из двух вариантов.

Совет. Если вы хотите использовать преимущества, предоставляемые хранением параметров в базе данных, но не хотите утяжелять клиент полнофункциональной базой данных, подумайте о реализации хранения параметров приложения в базе данных средствами программы Microsoft SQL Server 2005 Express Edition, которая распространяется бесплатно, или Microsoft SQL Server 2005 Workgroup Edition, стоимость которой является убедительным доводом в пользу ее применения для небольших реализаций.

Таблица 1.1. Сравнение вариантов хранения параметров приложения Особенность Хранение в базе данных Хранение в конфигурацином файле
Пользователь может легко изменить параметры ?
Приложение не требует для работы ядра СУБД ?
Параметры доступны в процессе загрузки приложения ?
В приложении можно реализовать ролевую модель обеспечения безопасности ?
В приложении можно реализовать централизованное управление параметрами ?
В приложении можно легко ограничить доступ к параметрам ?
В приложении может быть обеспечен гранулярный контроль над параметрами ?

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

Где хранить пользовательские настройки

Часто приложению необходимо хранить информацию о предпочтениях пользователей. В веб-приложениях это обычно реализуется при помощи файлов cookie (небольших текстовых файлов, которые хранят информацию о пользователях), но ввиду возросших требований к обеспечению безопасности в интернете такой подход может оказаться проблематичным.

При использовании некоторых видов идентификации пользователей пользовательские настройки можно хранить в базе данных. Это позволит управлять этими настройками, не обращаясь к клиентскому компьютеру. В базе данных можно хранить самые разные пользовательские настройки.

Эти настройки можно хранить в виде XML-данных, которые обеспечивают максимальную гибкость (о хранении XML-данных будет рассказано далее в этой лекции). Можно также использовать стандартные методы работы с данными для отслеживания пользовательских настроек. Если для хранения пользовательских настроек используется SQL Server, то пользователь может переносить их с одного клиента на другой.

Реализация таблицы пользовательских настроек

  1. Определите, какие параметры вам необходимо хранить. Хотя в базе данных приложения можно хранить все пользовательские настройки, важно решить, какие параметры необходимы для обеспечения функционирования приложения в особых случаях, а какие параметры должны быть доступными при любом входе пользователя в систему, с какого бы клиента этот вход не выполнялся.
  2. После того, как вы определите, какие параметры нужно хранить, разработайте необходимую для хранения параметров таблицу. табл. 1.2 представляет собой примерный проект таблицы для управления пользовательскими настройками в базе данных.
Таблица 1.2. Примерный проект таблицы для хранения пользовательских настроек Имя логического столбца Назначение
Идентификатор пользователя Хранит уникальный идентификатор пользователя, который может использоваться для идентификации и возврата пользовательских настроек. Тип данных этого столбца будет зависеть от реализации идентификаторов пользователей в приложении.
Дата добавления пользователя. В этот столбец записывается дата добавления Первая запись о пользовательских настройках обычно создается после добавления пользователя.
Дата обновления настроек Помогает управлять активными пользователями и проверять актуальность их настроек. Обновление данных часто является более важным, чем их создание.
Последний вход в систему Сохраняет информацию о последнем входе пользователя в систему. В некоторых случаях эта информация дублирует информацию в столбце Дата обновления настроек. В зависимости от реализации столбца даты обновления, можно отказаться от данного столбца и использовать только столбец Дата обновления.
Столбец или столбцы для хранения пользовательских настроек В этот столбец записываются пользовательские настройки, которые необходимо сохранить.
Читайте также:
Как проникает вредоносная программа на компьютер

Существует две распространенных реализации столбцов пользовательских настроек. Первая реализация — реляционная. Каждая настройка в этой реализации хранится в отдельном столбце таблицы. С этим решением связана следующая проблема: чтобы добавить дополнительную настройку, придется расширять таблицу путем добавления столбца.

Второй вариант — все пользовательские настройки хранятся в одном столбце. С появлением XML можно использовать XML-документ для хранения нужных настроек либо в столбце TEXT , либо в столбце с типом данных XML; об этом речь пойдет далее в этой лекции.

  • Хранимая процедура Insert . С помощью этой процедуры добавляется начальная запись пользовательских настроек. Часто это делается при добавлении пользователя, поэтому данную процедуру можно объединить с процедурой добавления пользователя.
  • Хранимая процедура Update . Обновляет запись пользовательских настроек. Эта процедура часто вызывается для управления пользовательскими настройками в приложении.

Важно. При отслеживании часто изменяющихся данных в таблице пользовательских настроек администратору придется активно наблюдать за производительностью и при необходимости регулировать работу реализации. Это особенно верно, если пользовательские настройки обновляются не просто для входа в приложение и выхода из него, но также и для других событий.

Где хранить XML-документы

Несколько лет назад XML-документы были новым веянием, но сейчас они уже стали привычными. Весьма вероятно, что вы уже видели и применяли XML-документы для настройки конфигурации и других задач в приложениях, с которыми работали. В SQL Server 2005 и Microsoft .NET Framework XML-документы широко используются для настройки параметров конфигурации и реализации других функций, таких, как службы интеграции SQL Server Integration Services (для которых XML хранятся в файлах .dtsx ) и службы составления отчетов SQL Server Reporting Services (данные XML хранятся в файлах с расширением . rdl ). XML имеет ряд преимуществ, не последнее из которых — гибкость при изменении требований к конфигурации приложения. Как было отмечено ранее, файлы XML также дают возможность пользователям приложения легко изменять параметры конфигурации.

XML также прекрасно справляется с хранением иерархических данных. Вот несколько примеров иерархических данных: магазинные чеки, спецификации материалов и счета за медицинское обслуживание. Все они включают родительские записи с дочерними записями разных уровней. Извлечение полных наборов этих данных из механизма базы данных может быть затруднено, но XML хранит данные в форме, позволяющей легко просмотреть данные. Поскольку XML очень эффективен и все более широко используется, разработчики компании Microsoft включили в SQL Server 2000 и SQL Server 2005 тип данных XML, а также реализовала особый механизм оптимизации и операторы T-SQL для управления XML-данными.

Примечание. XML-документы уже широко применяются для совместного использования информации внутренними и внешними потребителями в различных сферах бизнеса. В частности, приложения, используемые в здравоохранении, используют XML-схемы для организации совместного использования данных внешними партнерами и внутренними системами лечебных учреждений. Программный пакет Microsoft BizTalk Server 2006 разработан для управления бизнес-процессами и интеграции в подобных ситуациях и для этой цели использует XML-документы.

Поддержка XML в SQL Server 2005

В SQL Server 2005 разработчиками Microsoft в механизм базы данных были добавлены несколько новых специфических XML-функций. Эти усовершенствования позволили облегчить доступ к XML-данным и манипуляции с ними. Ниже перечислены некоторые из таких усовершенствований:

  • Собственный тип данных XML
  • Поддержка XML-схем
  • Возможность использования запросов XQuery к XML-данным, которые хранятся в столбцах с типом данных XML и в переменных
  • Возможность индексировать XML-данные, которые хранятся в столбцах XML
  • Поддержка языка манипулирования данными XML (XML-DML)
  • Усовершенствование существующих функций SQL Server 2000 для работы с XML, в том числе добавление ключевых слов OPENROWSET , FOR XML и OPENXML

Источник: intuit.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru