2009-05-29 2 views
1

Я читал, когда использовать статические классы в C#, но главный ответ не обязательно отвечал на мой вопрос. У меня есть приложение, которое взаимодействует с довольно похожим оборудованием, через HTTP-сервер. Каждое устройство должно быть зарегистрировано, а учетные данные, как правило, одинаковы. Я использую свойство Properties.Settings.Default.etc для обработки широких настроек приложения; однако, для удобства я отслеживаю последнее используемое имя пользователя/пароль при индивидуальном входе в устройство. Параметры по умолчанию, которые устанавливаются в окне параметров, используются в первую очередь и остаются неизменными, если они не изменятся через окно параметров, несмотря на то, что временные настройки изменяются и используются в стандартном порядке.Статические классы ... это нормально?

Во всяком случае, это сценарий ... в отношении вопроса, я делаю это:

private static class TemporarySettings 
{ 
    public static string Username = Properties.Settings.Default["Username"].ToString(); 
    public static string Password = Properties.Settings.Default["Password"].ToString(); 
} 

Это глупо?

+0

Umm ... У меня была цитата в названии ... Статические классы ... это «ОК», чтобы использовать их для внутреннего управления собственностью - или что-то в этом роде –

+0

Хорошо, если взять еще дальше и Я сделал ... частных EventHandlers статического класса { /* ... * /} И содержал все мои обработчик событий в классе? Я более или менее собираюсь для удобочитаемости и полезной/удобной организации ... –

+0

@Berdon Magnus, пожалуйста, не используйте статический класс обработчика событий, вы создадите побочный эффект, похожий на утечку памяти. Это связано с тем, что издатель событий имеет ссылки на своих подписчиков. См. Ответ Джона Скита на другой вопрос: http://is.gd/JkT1 –

ответ

3

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

  1. Если вы хотите изменить имя пользователя и пароль без перезапуска приложения, у вас не будет этой опции. Вы можете написать логику, чтобы посмотреть конфигурационный файл для изменения и перезагрузить значения, если они меняются.
  2. Если вы хотите «повторно использовать» свой код (особенно если вы добавили больше поведения, например, мониторинг изменений) для нескольких наборов имени пользователя и пароля, вам нужно будет преобразовать это в экземпляр.
  3. Если вы когда-либо захотите объединить тестовые классы, зависящие от этого класса, у вас будет очень трудное время, забивающее значения.

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

0

Вы устанавливаете имя пользователя и пароль для одного и того же значения, но кроме этого, нет.

+0

Хех - мое копирование и вставка и удаление нескольких вещей привели к тому, что ...: P –

1

Еще лучше, отметьте их readonly или используйте свойства, которые имеют только геттеры.

+0

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