2010-08-17 60 views
2

在SO上的其他MVP相關問題中,人們討論Presenter保存狀態信息(可能是會話狀態或UI狀態)。我想知道的是,因爲狀態基本上是「瞬態數據」,並且模型的目的是封裝數據訪問,不能將狀態保存在模型中?有沒有什麼經驗法則或利弊/存在將狀態存儲在演示者與模型中? MVP模式是否要求使用Presenter?在MVP架構中存儲狀態的位置

回答

3

該模型的目的不是封裝數據訪問,而是提供您的域的表示(模型),無論可能如何。有時候數據訪問被包含在模型中(例如使用Active Record樣式數據訪問),但更多的時候是單獨的。例如,當我在桌面應用程序中完成MVP時,演示者直接從數據庫檢索模型或使用repository - 該模型與數據訪問無關。

雖然存儲視圖相關狀態的位置有點灰色,但取決於您使用的是哪種類型的應用程序 - 對於桌面應用程序來說,它更容易,因爲您可以將它保留在演示者中,對於Web應用程序的事情會變得更棘手。您可能會考慮一個單獨的視圖模型,它可能會或可能不會包裝核心模型(如在.NET WPF開發中流行的MVVM模式中的ViewModel中)。

+0

是的,我爲視圖使用了單獨的模型。我正在嚴格爲客戶端應用MVP。後端只是一種無狀態服務,與用戶界面無關。 – 2010-08-17 20:16:42

+0

但它是視圖的模型(例如公開視圖中的相同字段)還是表示層上使用的域模型的副本?如果它純粹是一個視圖模型,那麼我會說MVVM比MVP更多 - 雖然我沒有聽說過WPF之外使用這種方法,但我想沒有理由不這樣做。在這種情況下,似乎是保持有狀態視圖數據的公平地點。如果它是用於視圖的域模型的副本,那麼我會說演示者應該處理它(以某種方式)。 (我假設這裏的數據不是你通常在模型中存儲的數據)。 – 2010-08-18 10:19:39

+0

我想我想要做的更像MVVM,因爲我所說的「狀態」純粹是針對視圖的當前狀態。你提出了一些讓我意識到這一點的好點。謝謝! – 2010-08-18 15:50:20

3

如果狀態直接與視圖綁定,那麼演示者就是合適的位置。

如果不是,模型可能是適當的地方,但在某些情況下,演示者可能是合適的。

這裏的關鍵在於View和Presenter在概念上是耦合在一起的 - 雖然Presenter可能不知道具體的View,但通常它必須公開它所服務的View的特定數據。