Хранение пользовательской информации в статическом классе - PullRequest
2 голосов
/ 15 января 2012

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

Обычно я сохраняю такие вещи с помощью свойства встатический класс:

public User CurrentUser { get; set; }

Какая у вас идея?

Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 15 января 2012

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

  • Тестируемость, если у вас есть синглтон, который не отображается через интерфейс, то невозможно (или просто) протестировать ваш код.
  • Масштабируемость, синглтон всегда будет синглтоном, поэтому вы не можете разделить эту ответственность между несколькими экземплярами, чтобы позволить вашему приложению масштабироваться. Обычно это касается только серверных приложений. На рабочий стол это действительно не распространяется
  • Параллелизм, у вас есть несколько потоков, обращающихся к вашему синглтону? если это так, вам нужно сделать его безопасным для потоков.

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

В общем, да, это нормально. Я сам использовал этот шаблон много раз в прошлом.

3 голосов
/ 15 января 2012

В WPF: Представьте, что у вас есть класс с именем UserInfo, который содержит всю необходимую информацию о текущем вошедшем в систему пользователе:

// You can use your Application.Current.Resources dictionary to store the
// current logged-in user info.
Application.Current.Resources["UserInfo"] = userInfo;

Затем вы можете получить текущийпользовательский информационный объект в любом месте вашего приложения со следующим кодом:

var userInfo = Application.Current.Resources["UserInfo"] as UserInfo;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...