2012-01-24 45 views
7

我開始開發MVP風格(GWTP)的GWT應用程序,並使用Spring安全性在服務器端進行身份驗證和授權。在GWT中存儲全局所需對象的最佳實踐

在應用程序的許多視圖中,我必須啓用或禁用與當前用戶的授權權限相關的控件。我已經有一個RPC服務,它提供對包含所有必要信息的userDetailsDto的訪問。

現在我的問題:什麼是在用戶端存儲用戶DTO的最佳地點?

由於用戶權限與許多主持人有關,所以我必須將它傳遞到任何地方。或者,我可以在每個演示者中設置RPC服務實例,並且每次都要求用戶詳細信息(可能緩存在客戶端)。但我不喜歡爲每個演示者提供用戶RPC服務的想法。

說實話,我寧願選擇放置UserDetails對象的中央註冊表,並且可以在我的應用程序的任何位置訪問它。 GWT中是否有這樣的註冊表?

正如我的例子,你可能經常遇到水平使用的對象。如何在GWT中處理它們?

回答

5

只需將您當前的用戶存儲在公共靜態變量中。 它將從任何地方訪問。

+0

這的確是我目前的解決方案。但是1)靜態變量在單元測試時是有問題的,2)很難決定哪個部分(類)負責保持靜態實例。主持人,RPC服務(意味着如果我想從那裏訪問用戶對象,那麼我對視圖對象中的RPC服務具有依賴關係。) – rainer198

+0

我將當前用戶存儲在ClientFactory實現中,很簡單並且遵守KISS原理(http://en.wikipedia.org/wiki/KISS_principle) – koma

+0

儘管我使用的是GIN而不是客戶端工廠,但我喜歡這個解決方案。很顯然,這個問題不能有一個真正的答案(stackoverflow甚至警告過我它可能會被拒絕),所以,如果我可以將兩個答案都標記爲「正確」,我會這樣做;-) – rainer198

4

我爲需要知道諸如登錄用戶的權限,他們的首選項等等的所有主持人注入了一個「AppState」對象。我更喜歡注入公共靜態變量,因爲它感覺更受控制,是在測試中更容易模擬,而額外的輸入則迫使我考慮每個對象是否真的需要訪問全局數據。

+0

您的意思是通過注入將它傳遞給演示者的構造函數與GIN的@Inject註釋? – rainer198

+0

我實際上只是將它傳遞給構造函數定義中的普通舊參數的構造函數。這不是那麼多額外的輸入,我喜歡改變某些東西時的行爲 - 在需要改變的每一點上編譯錯誤。恕我直言,在所有正確的點引起考慮。 –