我正在尝试设计一个模块来支持我的应用程序中的用户身份验证和管理(C#)。此模块应作为用于基础结构活动的DLL的一部分提供,以便其他开发人员需要将其用作“第三方”组件。这里的要点是我不负责UI(这取决于用户权限和会话),但只提供基础设施来使用。
所以我创建了一个UserManager
单例类,它允许像Login,Logout和其他几个函数和事件这样的操作。
UserManager类包含名为CurrentUser
的属性,其类型为ApplicationUser
。
ApplicationUser
是一个使用用户详细信息创建的类(例如Fullname,User name和类似的东西),还提供IsEligibleFor(Permission)
函数。
我希望用户获取UserManager
实例,并通过CurrentUser
属性与当前登录用户进行通信。
理想的方法是在调用Logout操作时使CurrentUser
无效,并在每次用户登录时创建新的ApplicationUser
。但这是有问题的,因为这些类的用户能够缓存ApplicationUser
的实例,而不会注意到更改。
这就是为什么我正在考虑转向一个解决方案,我在ApplicationUser对象中有一个标志,指示对象是否仍然有效。但这需要检查ApplicationUser的每个方法的有效性,我不喜欢。
我想知道我是否缺少某种解决方案或模式。
答案 0 :(得分:0)
听起来Observer pattern就是你的追随者。这些类将观察 UserManager
类,然后在发生更改时随后通知。
他们可以监听特定的更改,因此在您的方案中,他们可以监听ApplicationUser
对象何时更改,然后他们可以丢弃旧副本并缓存新副本。
在实现方面,使用.NET可以很容易地使用事件实现它。