在SO上的其他MVP相關問題中,人們討論Presenter保存狀態信息(可能是會話狀態或UI狀態)。我想知道的是,因爲狀態基本上是「瞬態數據」,並且模型的目的是封裝數據訪問,不能將狀態保存在模型中?有沒有什麼經驗法則或利弊/存在將狀態存儲在演示者與模型中? MVP模式是否要求使用Presenter?在MVP架構中存儲狀態的位置
2
A
回答
3
該模型的目的不是封裝數據訪問,而是提供您的域的表示(模型),無論可能如何。有時候數據訪問被包含在模型中(例如使用Active Record樣式數據訪問),但更多的時候是單獨的。例如,當我在桌面應用程序中完成MVP時,演示者直接從數據庫檢索模型或使用repository - 該模型與數據訪問無關。
雖然存儲視圖相關狀態的位置有點灰色,但取決於您使用的是哪種類型的應用程序 - 對於桌面應用程序來說,它更容易,因爲您可以將它保留在演示者中,對於Web應用程序的事情會變得更棘手。您可能會考慮一個單獨的視圖模型,它可能會或可能不會包裝核心模型(如在.NET WPF開發中流行的MVVM模式中的ViewModel中)。
3
如果狀態直接與視圖綁定,那麼演示者就是合適的位置。
如果不是,模型可能是適當的地方,但在某些情況下,演示者可能是合適的。
這裏的關鍵在於View和Presenter在概念上是耦合在一起的 - 雖然Presenter可能不知道具體的View,但通常它必須公開它所服務的View的特定數據。
相關問題
- 1. 棋在GWT + MVP,並試圖存儲在本地存儲狀態
- 2. 在Go中存儲狀態
- 3. 在Android中存儲狀態
- 4. 存儲在MVP框架中的數據在哪裏
- 5. C#的WinForms,MVP架構
- 6. Zend框架緩存存儲位置
- 7. 架構層和MVP在android中
- 8. Redux的適當的位置/方法來存儲狀態值
- 9. 爲什麼ThreadPoolExecutor中的運行狀態存儲在高位中?
- 10. 用於存儲用戶位置歷史記錄的MongoDB架構
- 11. 在android ICS框架中更改狀態欄的位置
- 12. Windows服務狀態存儲的推薦位置?
- 13. powerbuilder中的MVP架構實現
- 14. GWT MVP架構優勢
- 15. 在Rails中存儲(結構化)配置數據的位置
- 16. 在MVP中查看邏輯的位置?
- 17. 在C中存儲變量的狀態#
- 18. 存儲沒有在架構中定義的值(動態模式?)
- 19. 在內存中靜態變量的存儲位置?
- 20. Java存儲狀態
- 21. 存儲Google位置SQLite中的位置
- 22. 使用redux-storage重置存儲在本地存儲中的狀態問題
- 23. DataTables保存狀態滾動位置
- 24. 保存$位置參數狀態AngularJS
- 25. 保存滾動條狀態/位置
- 26. 清潔架構/ MVP:對不同模型使用不同的存儲庫。好嗎?
- 27. Bootstrap Carousel:在Cookie中存儲狀態?
- 28. 如何在NSUserdefaults中存儲UISegmentedControle狀態
- 29. 在C++元編程中存儲狀態?
- 30. 存儲庫狀態在JGit中合併
是的,我爲視圖使用了單獨的模型。我正在嚴格爲客戶端應用MVP。後端只是一種無狀態服務,與用戶界面無關。 – 2010-08-17 20:16:42
但它是視圖的模型(例如公開視圖中的相同字段)還是表示層上使用的域模型的副本?如果它純粹是一個視圖模型,那麼我會說MVVM比MVP更多 - 雖然我沒有聽說過WPF之外使用這種方法,但我想沒有理由不這樣做。在這種情況下,似乎是保持有狀態視圖數據的公平地點。如果它是用於視圖的域模型的副本,那麼我會說演示者應該處理它(以某種方式)。 (我假設這裏的數據不是你通常在模型中存儲的數據)。 – 2010-08-18 10:19:39
我想我想要做的更像MVVM,因爲我所說的「狀態」純粹是針對視圖的當前狀態。你提出了一些讓我意識到這一點的好點。謝謝! – 2010-08-18 15:50:20