2014-09-01 33 views
0

因此,讓我們採取簡單的例子:應將UI狀態存儲在模型或控制器中?

data --> projection --> view 

我在這裏呼籲投影什麼可以導致篩選,排序,突出等任何UI狀態...

在MVC模式,數據存在於模型,視圖是視圖,狀態屬於哪裏?

我曾經在控制器中存儲狀態,但我聽說它很糟糕,控制器應該保持「精益」,並且應該將所有東西都塞進模型中。我可以看到使用無狀態控制器進行測試的好處,但將模型中的數據與投影結合起來似乎並不直觀。

如果不同的視圖需要不同的數據預測會怎樣?它如何分解?

[編輯]找到一些相關的問題herehere但他們不直接回答這個問題。我知道把邏輯用於投影模型中的數據,但它沒有說明這些投影的狀態應該保持在哪裏。

回答

1

你正在談論的「投影」是兩件事之一。要麼是實際的模型數據,此時它屬於模型層,要麼是MVVM中的ViewModel。因此,它存在於視圖和控制器之間的它自己的層中。

我真的需要看到更多的細節,以瞭解哪些是你想要完成的更好的表示。例如,如果這是存儲複選框的狀態和文本字段,那麼它是MVVM。如果您記錄的是「已選擇」的實體列表,則它可能屬於域圖層。

如果它是自己的模型,它可能不會與原始模型相同。它可以完全分開,但仍取決於其他模型。

+0

我在數據可視化上下文中工作,投影是模型的處理版本,我想是一種緩存。 ViewModel在這裏似乎很適合。在MVVM中是否有必要擁有一個視圖或者視圖能夠直接訪問模型? – Renaud 2014-09-03 12:05:21

+0

當你說「已處理」時,它讓我覺得它仍然是一個模型,只是該模型的一種不同表示,因此應該仍然存在於模型層中。如果您沒有將其「處理」爲專門針對您的特定視圖的對象,那麼它只是一個簡單的模型,這使決策變得容易。 – 2014-09-03 14:18:09

+0

不要將緩存與不同的表示混爲一談。如果你期望對象在會話中出現,那麼它不是緩存。 – 2014-09-03 14:23:38

相關問題