2013-03-18 39 views
0

我有一個主持人調用Handler並從服務器獲取數據 另一個小部件需要相同的數據,這是現有視圖的微縮版本,但是這將在應用程序中呈現所有時間。使用GWTP處理常見的電話

這裏我常見的是調用處理程序,相同的處理程序和操作對象。

什麼是設計的最佳方式。

我可能的解決方案: 1)編寫一個可以訪問調度器對象的Common類(通過Ginjector注入),使用這些方法獲取數據。 但按照MVP體系結構,調度程序的使用僅限於演示者,但這是非演示者類。

回答

1

AFAIK沒有關於MVP的內容,其中說一切都必須在Presenter完成。將多個Presenters共有的邏輯封裝在一個公共類中是有意義的。

MVP是一種模式,而不是寫在石頭上的規則。所以,當它有意義時,你可以偏離模式。

恕我直言,普通的班級是一種正確的做法。
使用通用類來處理對後端的請求也使得例如實現緩存和認證變得容易。

有兩種方法可以做到通信之間的Presenters和公共類:

  1. 注入你的普通類的單一實例成所需要的數據全部Presenters。從演示者可以調用普通類的方法並註冊回調。
  2. 將全局EventBus注入普通類並從相應的Presenters中觸發Event(即LoadDataEvent),並在普通類中處理此Event。當從後端接收到數據時,您可以從公共類中觸發另一個Event(即DataLoadedEvent),並在相應的Presenters中處理該數據。

解決方案1 ​​是可能更容易實現,但你有共同的階級和Presenter之間的一些耦合(如果你使用依賴注入它不是那麼糟糕)。

解決方案2需要多一點代碼(您必須定義事件),但提供了很大的靈活性和解耦。例如,如果你創建一個新的Presenter,這也是對你感興趣只需註冊在演示中DataLoadedEvent處理程序中的數據和你做。

+0

忽略這兩個選項在我心中,我deicded去與選項1 .... 在我的情況下,我必須打破MVP拱,因爲它不會幫助我............ – JAVAC 2013-03-19 11:25:34

1

如果使用的是事件總線,您的演講(這將調用處理程序)可以發射新的數據和事件的微型小部件可以與事件總線註冊以接收他們。通過這種方式,只有一位演示者會調用服務器,並且可以使用事件來通知客戶端上的任何內容。

+0

這裏的問題是有實際的觀點的機會不會被實例化,但微型部件需要的數據。 – JAVAC 2013-03-19 04:57:35

+0

也許它應該是從服務器獲取數據的微型小部件,並且當其他小部件被實例化時,您可以再次刷新數據。 – Laco 2013-03-19 07:43:07