Глобальная переменная (или альтернатива) в .NET.

Какая наилучшая практика для хранения глобальных переменных в приложении VB.NET WinForms. Например, когда пользователь входит в приложение, вы можете захотеть сохранить объект CurrentUser, доступ к которому можно получить во всем приложении. Вы можете сохранить это как объект в модуле или создать класс, который содержит члены для всех необходимых глобальных переменных, вам все равно нужно будет хранить экземпляр этого места, хотя.

Является ли эта среда легким решением для этого?

Ответ 1

Я думаю, что "не надо" немного жестко, здесь цитата от Стив Макконнелл:

Используется с дисциплиной, глобальными переменными полезны в нескольких ситуациях.

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

Прямо из кода "Tour de Force" Complete есть несколько причин использовать глобальные данные:

  • Сохранение глобальных значений
  • Оптимизация использования чрезвычайно распространенных данных
  • Устранение данных tramp

МакКоннелл также говорит:

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

вот альтернативы, которые он перечисляет:

  • Начните с создания каждой переменной local и сделать переменные глобальными только так, как вам нужно
  • Различать глобальный и класс переменные
  • Использовать процедуры доступа

То, что я упомянул здесь, получает большое освещение в фантастической книге Code Complete

Ответ 2

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

"Не".

(Если это звучит жестко, подумайте, что такие вещи, как CurrentUser, обычно принадлежат тому, что среда уже поддерживает для вас уникальный экземпляр, например Session. Посмотрите API для получения текущего сеанса, сохраните свой CurrentUser и не создавайте свои собственные глобальные переменные, что сделает ваше приложение более сложным для поддержания и уязвимости для условий гонки.)

Ответ 3

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

Ответ 4

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

Если у вас есть класс, которому нужен экземпляр класса CurrentUser, попросите его в его конструкторе.

См. здесь для получения дополнительной информации: http://misko.hevery.com/code-reviewers-guide/flaw-brittle-global-state-singletons/

Ответ 5

Моя практика заключается в том, чтобы включить глобальные переменные, такие как CurrentUser, ConfigFilePath и т.д. в program.vb(класс запуска с субмассивом). Таким образом, никто не использует глобальные переменные бездумно, так как их доступ должен быть достигнут через пространство имен программ.

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

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

Ответ 6

singleton pattern является более безопасным, чем глобальное разнообразие сада.