2013-05-08 3 views
0

Я пытаюсь создать модуль для поддержки аутентификации и управления пользователями в моем приложении (C#). этот модуль должен быть доставлен как часть DLL, предназначенного для работы в инфраструктуре, так что другие разработчики должны использовать его как компонент «третьей стороны». Главное здесь, что я не отвечаю за пользовательский интерфейс (который зависит от разрешений пользователя и сеанса), но только обеспечивает инфраструктуру для работы.кэширование и обновление свойств

Итак, я создал одноэлементный класс UserManager, который позволяет такие действия, как Вход, Выход из системы и еще несколько функций и событий. Класс UserManager содержит свойство с именем CurrentUser, которое имеет тип ApplicationUser.

ApplicationUser - это класс, который создается с данными пользователя (такими как полное имя, имя пользователя и тому подобное), а также предоставляет функцию IsEligibleFor(Permission).

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

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

Мне было интересно, есть ли какое-то решение или шаблон, который я здесь отсутствует.

ответ

0

Звучит как Observer pattern - это то, что ваш после. Классы будут наблюдать класс UserManager и затем уведомляться о каждом изменении.

Они могут прослушивать определенные изменения, поэтому в вашем сценарии они могут прослушивать, когда объект ApplicationUser изменяется, и затем они могут отбрасывать старую копию и кэшировать новую.

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

+0

Это «решение» было принято (и я действительно позволю пользователю подписаться на событие логотипа), но я все еще ищу решение, которое возьмет на себя ответственность за повторное кэширование от пользователя. с вашим решением я установлю CurrentUser равным null, но пользователь все равно сможет общаться со старой копией, не зная, что он старый. –

+0

Не несет ли ответственность слушателей кэширование пользователя? Вы можете отправить нового пользователя вместе с событием, и слушатели в основном просто заменят свой кешированный пользовательский объект объектом, отправленным с событием. «* с вашим решением я установлю CurrentUser равным нулю, но пользователь все равно сможет взаимодействовать со старой копией *» - нет, они бы не так, как вы бы заменили «старую» копию новой. Возможно, я неправильно понимаю, какова ваша текущая настройка, может быть лучше, если вы обновите свой вопрос с помощью рабочего примера. – James

+0

Я хочу, чтобы пользователь использовал этот класс, не беспокоясь о проблемах с кэшированием. Я хочу убедиться, что нет механизма, которого я не вижу. Спасибо :) –

Смежные вопросы