我有一個關於如何使用MVP時,處理主持人之間的通信問題。假設我有兩個MVP三人組。一個是產品列表(三元組A),另一個是關於當前選擇的產品(三元組B)的一些一般信息。演示者之間的MVP通信?
如何告訴Presenter B它需要更新,因爲所選產品已由A更改?我當然可以想辦法做到這一點,但我想知道是否有一個通用的慣例來處理這個問題。
在此先感謝您的任何想法!
我有一個關於如何使用MVP時,處理主持人之間的通信問題。假設我有兩個MVP三人組。一個是產品列表(三元組A),另一個是關於當前選擇的產品(三元組B)的一些一般信息。演示者之間的MVP通信?
如何告訴Presenter B它需要更新,因爲所選產品已由A更改?我當然可以想辦法做到這一點,但我想知道是否有一個通用的慣例來處理這個問題。
在此先感謝您的任何想法!
模式本身並沒有真正規定如何處理這個問題。
我自己的偏好是一個消息/事件中心,演示者可以在某些事件中註冊興趣。它可以防止複雜的依賴樹,並保持演示者的可測試性。
例如:
class PresenterA
{
void HandleProductSelectionChanged(int productId)
{
EventHub.Publish(EventType.ProductChanged, productId);
}
}
class PresenterB
{
void PresenterB
{
EventHub.Register(EventType.ProductChanged, HandleProductChanged);
}
public void HandleProductChanged(object state)
{
var productId = (int)state;
var productDetails = LoadProductDetails(productId);
view.DisplayProductDetails(productDetails);
}
}
EventHub將保留用戶的列表來調用每個事件的類型。
您保留可測試性 - 只需撥打HandleProductChanged
即可瞭解PresenterB如何響應新產品選擇。
唯一的缺點(與任何圖案)是你介紹了一個間接層。如果PresenterA直接調用PresenterB,或者PresenterB聽到PresenterA上的事件,那麼很明顯會發生什麼事情。
在這種方法中,您可以通過額外的步驟查看EventType.ProductChanged,然後查找哪些演示者在該事件中註冊了興趣。
在我自己的經驗,間接的是單級是值得模塊化你。
個人我不同意的方式有很多人選擇事件總線來解決這類問題
這是我很難想象的情況下,當兩個主持人需要互相溝通,你可以提供一個真實的案例?
在我看來,如果兩位演示者需要相互溝通,那麼您應該將這兩者合併爲一個演示者。請記住,模型對象在兩個用例之間的交流也是業務邏輯,因此主講者的範圍可能比您想象的要大。
請考慮一下,如果您以正確的方式使用協作者,那麼您不需要演示者之間的通信。數據應由合作者提供。
嗨,你可以點亮一下模型與演示者之間的溝通方式,以便演示者可以在視圖上執行一些操作。對於例如,比如說,讀取數據庫中的模型做的話,應該如何建模告訴主持人,它已經讀取數據並將數據傳回主持人,這樣主持人可以更新視圖。 – eRaisedToX 2017-05-25 06:18:32
「數據庫讀取在模型中完成」... naat XD ...我更願意創建一個交互器。 – 2017-05-30 13:09:35
這正是我一直在尋找,看起來比周圍路過主持人引用好多了。當我不累的時候,我明天會看看這個。謝謝。 – user1277327 2012-03-19 00:47:36