В C #, что является лучшим методом для инкапсуляции переменных, которые мне нужно использовать в нескольких методах? Можно ли просто объявить их в начале моего класса над двумя методами?
Также, если я использую настройки приложения из моего конфигурационного файла, я должен использовать геттер? нравится...
private string mySetting{ get { return WebConfigurationManager.AppSettings["mySetting"]; } }
Какая лучшая практика?
c#
programming-practices
user1944367
источник
источник
WebConfigurationManager.AppSettings
потому что его намного легче изменить позжеОтветы:
Это не просто хорошо. Согласно книге «Чистый код», это действительно очень хорошая практика, и дядя Боб действительно поощряет ее. Переменная, используемая многими методами, может показывать высокую степень сплоченности между методами. Кроме того, высокая степень объектных переменных также может указывать на то, что указанный класс следует разделить на две части, поэтому объявление их как объектных переменных может помочь вам найти скрытых кандидатов в класс.
Переменные уровня объекта не являются глобальными переменными, поэтому не бойтесь использовать их, если они должны использоваться разными методами.
источник
Инкапсуляция ваших настроек на постоянной основе - отличная идея.
Что я делаю, так это создаю класс настроек либо один статический глобальный класс, либо один или несколько классов экземпляров, которыми я потом буду управлять с помощью внедрения зависимостей. Затем я загружаю все настройки из конфигурации в этот класс при запуске.
Я также написал небольшую библиотеку, которая использует рефлексию, чтобы сделать это еще проще.
Как только мои настройки находятся в моем конфигурационном файле
Я делаю статический или экземплярный класс в зависимости от моих потребностей. Для простых приложений с небольшим количеством настроек подходит один статический класс.
Затем с помощью моей библиотеки вызова либо
Inflate.Static
илиInflate.Instance
и прохладная вещь я могу использовать любой ключевой источник значения.Весь код для этого находится в GitHub на https://github.com/Enexure/Enexure.Fire.Configuration
Есть даже пакет nuget:
Код для справки:
источник