Лучший способ получить доступ к настройкам пользователя / сайта
Вопрос
Была пара вопросов, которые вроде как касались этого, но не касались моего точного вопроса, так что поехали.
Что касается настроек сайта, если они хранятся в базе данных, вы:
- извлекайте их из базы данных каждый раз, когда кто-то делает запрос
- сохраните их в переменной сеанса при входе в систему
- ???????
Для пользовательских настроек делаю ли я то же самое, что и для настроек сайта??
Мы были бы весьма признательны за любые рекомендации / наилучшую практику.
Ваше здоровье
Решение
Я предпочитаю подход, подобный предлагаемому Гломеком...Кэширование настроек в WebCache значительно повысит скорость доступа.Рассмотрим следующее:
#region Data Access
private string GetSettingsFromDb(string settingName)
{
return "";
}
private Dictionary<string,string> GetSettingsFromDb()
{
return new Dictionary<string, string>();
}
#endregion
private const string KEY_SETTING1 = "Setting1";
public string Setting1
{
get
{
if (Cache.Get(KEY_SETTING1) != null)
return Cache.Get(KEY_SETTING1).ToString();
Setting1 = GetSettingsFromDb(KEY_SETTING1);
return Setting1;
}
set
{
Cache.Remove(KEY_SETTING1);
Cache.Insert(KEY_SETTING1, value, null, Cache.NoAbsoluteExpiration, TimeSpan.FromHours(2));
}
}
private Cache Cache { get { return HttpContext.Current.Cache; } }
Вы получите возможность динамической загрузки, сохранение памяти при удалении элементов из кэша после 2 часов неиспользования, а также сброс и перезагрузку, необходимые при изменении настроек.
Другие советы
Я предлагаю создать модуль для извлечения настроек, который можно было бы реализовать любым способом, а затем для вашей первой реализации каждый раз обращаться к базе данных, поскольку это проще.Если у вас возникли проблемы с производительностью, добавьте кэширование в модуль, чтобы уменьшить трафик базы данных.
Обычно я бы помещал настройки сайта в файл web.config, если вы не создаете приложение, которое имеет несколько сайтов и часто изменяется самим приложением, обычно не имеет смысла сначала помещать его в базу данных.
Для пользовательских настроек я бы рассмотрел вариант, начинающийся с значения по умолчанию asp.net Поставщик профиля, который будет хранить настройки в базе данных и управлять повторным вводом пользовательских настроек один раз за запрос и сохранять обновления до конца, чтобы свести к минимуму количество обращений к базе данных.Как только вы начнете сталкиваться с проблемами производительности, вы можете рассмотреть возможность расширения поставщика профилей для кэширования и / или ваших конкретных потребностей.