【问题标题】:property caching and updating属性缓存和更新
【发布时间】:2013-05-02 16:34:02
【问题描述】:

我正在尝试设计一个模块来支持我的应用程序 (C#) 中的用户身份验证和管理。该模块应作为用于基础设施活动的 DLL 的一部分交付,以便其他开发人员需要将其用作“第三方”组件。这里的重点是我不负责 UI(这取决于用户权限和会话),而只是提供使用的基础架构。

所以我创建了一个UserManager 单例类,它允许登录、注销等操作以及更多功能和事件。 UserManager 类拥有一个名为CurrentUser 的属性,其类型为ApplicationUser。

ApplicationUser 是一个使用用户详细信息(例如全名、用户名等)创建的类,还提供了一个IsEligibleFor(Permission) 函数。

我希望用户获取UserManager 实例,并通过CurrentUser 属性与当前登录的用户进行通信。 理想的方法是在调用注销操作时取消CurrentUser,并在每次用户登录时创建一个新的ApplicationUser。但这是有问题的,因为这些类的用户能够缓存ApplicationUser 的实例,而不会注意到更改。

这就是为什么我正在考虑转移到一个解决方案,在该解决方案中我在 ApplicationUser 对象中有一个标志,指示该对象是否仍然有效。但这需要检查ApplicationUser的每个方法的有效性,我不喜欢。

我想知道这里是否缺少某种解决方案或模式。

【问题讨论】:

    标签: .net caching


    【解决方案1】:

    听起来Observer pattern 是您所追求的。这些类将观察UserManager 类,然后在发生更改时收到通知。

    他们可以侦听特定的更改,因此在您的场景中,他们可以侦听 ApplicationUser 对象何时更改,然后他们可以丢弃旧副本并缓存新副本。

    在实现方面,使用 .NET,您可以使用事件轻松实现。

    【讨论】:

    • 已经想到了这个“解决方案”(我确实会让用户订阅注销事件),但我仍在寻找一个负责重新缓存的解决方案用户。使用您的解决方案,我会将 CurrentUser 设置为 null,但用户仍然可以弄乱旧副本,而不知道它是旧副本。
    • 缓存用户不是监听器的责任吗?您可以将新用户与事件一起发送,并且侦听器基本上只是将其缓存的用户对象替换为随事件发送的对象。 “使用您的解决方案,我会将 CurrentUser 设置为 null,但用户仍然可以弄乱旧副本” - 不,他们不会因为您将“旧”副本替换为新的那一个。我可能误解了您当前的设置,可能更适合您使用工作示例更新您的问题。
    • 我希望用户使用这个类而无需担心重新缓存问题。我想确保没有我遗漏的机制。谢谢:)
    • 我已经更新了我的项目的意图...我将这些类作为库的一部分公开,其他人会使用它,所以我不想让缓存问题复杂化.
    • @YoniDor "我希望用户使用这个类而无需担心重新缓存" - 具体使用哪个类,UserManager?如果是这种情况,那么只要访问ApplicationUser 属性,您就可以在类本身内进行内部缓存,它将始终是最新版本。
    猜你喜欢
    • 2012-12-06
    • 2011-03-27
    • 1970-01-01
    • 2015-12-15
    • 2015-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-04
    相关资源
    最近更新 更多