2013-05-08 274 views
0

我想設計一個模塊來支持我的應用程序(C#)中的用戶身份驗證和管理。此模塊應作爲用於基礎結構活動的DLL的一部分提供,以便其他開發人員需要將其用作「第三方」組件。這裏的要點是,我不負責UI(取決於用戶權限和會話),但只提供基礎設施。屬性緩存和更新

所以我創建了一個UserManager singleton類,它允許登錄,註銷等幾個函數和事件。 UserManager類包含一個名爲CurrentUser的屬性,其類型爲ApplicationUser

ApplicationUser是與用戶的詳細信息(如全名,用戶名和類似的東西)創建的類,並且還提供了一個IsEligibleFor(Permission)函數。

我希望用戶獲得UserManager實例,並通過CurrentUser屬性與當前登錄用戶通信。 當一個註銷操作被調用時,理想的方法是取消CurrentUser,並且每次用戶登錄時創建一個新的ApplicationUser。但是這是有問題的,因爲這些類的用戶能夠緩存ApplicationUser的實例,而不會注意到這種變化。

這就是爲什麼我想轉移到ApplicationUser對象中有一個標誌的解決方案,該標誌指示對象是否仍然有效。但是這需要檢查ApplicationUser的每種方法的有效性,我不喜歡這種方法。

我想知道是否有某種解決方案或模式我在這裏失蹤。

回答

0

聽起來像Observer pattern是你的後。這些類將觀察UserManager類,然後隨後通知每當有變化。

他們可以偵聽特定更改,因此在您的方案中,他們可以偵聽對象何時發生更改,然後可以放棄舊副本並緩存新副本。

在實現方面,使用.NET可以很容易地使用事件來實現它。

+0

這個「解決方案」被認爲是的(我確實會讓用戶訂閱logoout的事件),但我仍然在尋找一個解決方案,將承擔用戶重新緩存的責任。在你的解決方案中,我將把CurrentUser設置爲null,但用戶仍然可以混淆舊版本,而不知道它是舊版本。 – 2013-05-08 13:04:50

+0

緩存用戶不是聆聽者的責任嗎?您可以將新用戶和事件一起發送,並且偵聽器基本上只會將其緩存的用戶對象替換爲隨事件一起發送的對象。 「*用你的解決方案,我將CurrentUser設置爲null,但用戶仍然可以混淆舊的副本*」 - 不,他們不會這樣做,因爲你會用新的副本替換舊的副本。我可能誤解你當前的設置是什麼樣子,可能更適合你通過一個工作示例更新你的問題。 – James 2013-05-08 13:06:41

+0

我希望用戶使用這個類,而不需要擔心重新緩存問題。我想確保沒有我失蹤的機制。謝謝:) – 2013-05-08 13:11:11