Nano Hash - криптовалюты, майнинг, программирование

Использовать настройки напрямую или через класс-оболочку?

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

Разве класс Settings уже не является синглтоном?

[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {

    private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));

    public static Settings Default {
        get {
            return defaultInstance;
        }
    }
// rest of class...
}

.
.
.
Итак, в чем преимущество переноса настроек в другой класс и выполнения следующих действий:

int foo = MySettingsWrapper.MyInt;

вместо того, чтобы делать это непосредственно там, где это необходимо:

int foo = Settings.Default.MyInt;

Ответы:


1

Класс Settings сам по себе не является синглтоном. Вы можете сделать:

var s1 = new Settings();
var s2 = new Settings();
var s3 = new Settings();

Однако я считаю, что это не принесет вам много пользы, так как AFAIK значения s1, s2 и s3 будут сохранены в одном и том же месте:

c:\Documents and Settings>\<username>\[Local Settings\]Application Data\<companyname>\<appdomainname>_<eid>_<hash>\<verison>\user.config

Итак, я подозреваю:

s1.MyInt = 1;
s1.Save();

будет таким же, как

s2.MyInt = 1;
s2.save();

По этой причине вы получаете статическое свойство Settings.Default, которое возвращает один потокобезопасный экземпляр. Пользуюсь постоянно как есть, не вижу смысла заворачивать. Однако вы можете расширить его, например, если хотите контролировать местоположение user.config: Как сделать сгенерированные дизайнером настройки приложения .Net переносимыми

31.12.2010

2

Это тип инъекции зависимости.

Settings.Default — это 1 тип реализации механизма настроек.

Добавление оболочки означает, что код реализации находится в одном месте, а не в вашем коде.

Было бы легко заменить этот файл на другую реализацию без необходимости изменения кода.

Может быть лишним. Вам нужно решить, понадобится ли вам когда-нибудь поменять эту реализацию. Но подумайте об этом, вы можете найти в будущем какую-то другую систему, которой может потребоваться доступ к этим настройкам (задания SQL, удаленные службы и т. д.).

Обычно эта «оболочка» должна быть реализацией интерфейса, и вы должны использовать инверсию контейнера управления (например, Castle.Windsor) для внедрения реализации в среду выполнения.

31.12.2010

3

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

22.12.2016
Новые материалы

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

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

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..