Где хранить глобальные настройки приложения? - PullRequest
4 голосов
/ 23 февраля 2012

У меня есть некоторые глобальные настройки Например, некоторые ниже:

ShortLeaveAllowedInOneDay = 2
LeaveAllowedInMonth = 3

У меня есть следующие опции для сохранения этих глобальных настроек

1-Store в таблице базы данных
2-Store в файле Webconfig
3-Store в классе как константный
XML-файл с 4 входами

Не могли бы вы предложить мне, какой из них лучше подходит и почему

Я использую Asp.net MVC3 с sqlserver 2005

Ответы [ 7 ]

9 голосов
/ 23 февраля 2012

Это зависит от ваших требований, каждый из этих вариантов имеет свои преимущества и недостатки.Он попытался перечислить несколько:

1.Хранить в базе данных таблицы
Преимущества:

  • Относительно легко читать настройки.
  • Возможна запись / обновление настроек.
  • Доступ к базе данных быстрый.
  • Обновления значений базы данных доступны немедленно.
  • БД может совместно использоваться несколькими экземплярами в кластерной среде.

Недостатки:

  • Требуется больше инфраструктуры, чем остальные опции (т. Е. Таблицы, доступ к БД и т. Д.).
  • При неправильном выполнении DB IO может статьвопрос.(Может быть решена с помощью стратегий кэширования)



2.Хранить в файле web.config
Преимущества:

  • Простота добавления и доступа к настройкам.

Недостатки:

  • Изменения в web.config могут привести к перезапуску пула приложений.
  • Обычно настройки не шифруются.
  • В кластерной среде файл должен синхронизироваться с другими экземплярами.
  • Обычно приходится иметь дело со строковыми типами данных и возможнымиНедопустимый ввод данных пользователем при установке настроек.



3.Хранить в классе как постоянное поле
Преимущества:

  • Очень просто работать с.
  • Может работать со статическими типами.
  • Хороший первый шаг к рефакторингу настроек в один из других вариантов.

Недостатки:

  • Требуется перестройка для изменения настроек.


4.В XML-файле
Преимущества:

  • Удобно для хранения сложных настроек таких иерархий.
  • Пользовательские настройки конфигурации XML могут быть встроены вweb.config.(Популярный параметр см. log4net в качестве одного из таких примеров)
  • Обновления файлов конфигурации могут быть выполнены без перезапуска пула приложений.
  • XSD может обеспечить достоверность настроек в файле(структура и типы данных)

Недостатки:

  • Это XML.Не действительно удобочитаемо для человека, улучшены форматы, подобные YAML.
  • Требуется реализация для анализа XML для чтения и записи настроек.
1 голос
/ 23 февраля 2012

Добавьте сеанс AppSettings в файл веб-конфигурации, к которому можно получить доступ из кода, например:

System.Configuration.ConfigurationManager.AppSettings["ShortLeaveAllowedInOneDay "];

РЕДАКТИРОВАТЬ: и файл Confir будет выглядеть так:

<appSettings>

<add key="ShortLeaveAllowedInOneDay " value="2" />

</appSettings>
1 голос
/ 23 февраля 2012

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

Я бы сказал, что варианты 4 и 2 в принципе одинаковы, и это личный выбор.Лично мне нравится определять пользовательский раздел конфигурации , а затем определять только этот раздел в своем собственном файле .config ( this показывает, как это сделать), чтобы у вас не былодействительно массивный файл web.config, по которому пользователь должен перемещаться.

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

0 голосов
/ 23 февраля 2012

Я буду более практичным.Два основных случая.

  1. Значения / параметры, которые изменяют единицы и имеют решающее значение для запуска / запуска / инициализации программы
  2. Значения могут изменяться или различаться для каждого пользователя.

Вы сохраняете исходные переменные в web.config, а все остальные в базе данных.Если у вас нет базы данных, то все, что доступно, например, XML-файл.

0 голосов
/ 23 февраля 2012

Вы можете сохранить переменную в файле Web.config.

0 голосов
/ 23 февраля 2012

Ни один подход по своей природе не лучше, чем другие.

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

0 голосов
/ 23 февраля 2012

Хранение глобальных переменных в файле web.config - очень распространенная задача.Хранение значений в файле web.config чрезвычайно полезно, когда база данных может быть перегружена, и когда вам не нужен отдельный внешний файл.

Чтение файла .xml несколько раз для каждого жизненного цикла страницы будет ОЧЕНЬ плохимдля производительности.

Я бы определенно пошел на web.config.

...