2012-03-04 26 views
1

在MVC中,模型包含域的數據和邏輯,視圖向用戶顯示信息,並提供用於交互的小部件,如按鈕,控制器處理按鈕按下等輸入。把視圖狀態放在MVC中的選擇位置?

但視圖的狀態屬於哪裏?

例如,如果您有國際象棋遊戲,您可能需要跟蹤選擇哪個圖形以及突出顯示哪些字段(可能需要突出顯示可能的移動)。

我讀了關於演示模型http://martinfowler.com/eaaDev/PresentationModel.html,這是一種做法。

我能想到的其他方式來做到這一點:

  • 採用第二種模式,這不僅節省了選擇,並強調
  • 把這些信息在視圖中(但我們必須在某種邏輯GUI)
  • 把它放到控制器中(但是我們需要手動同步視圖和控制器狀態)
  • 包裝域模型(或繼承它)並添加選擇和高亮到其他數據(this有些是演示模型)

但是,在mvc中這樣做的「正常」方式是什麼(如果存在這樣一種常規方式),或者您使用或推薦哪種方式?

+0

在這裏提出了類似的問題:http://stackoverflow.com/questions/443910/where-should-i-save-a-complex-mvc-application-ui-state – twaggs 2012-03-04 20:01:18

+0

thx爲鏈接。但是這個線程是高度web特定的。我主要針對的是桌面環境,其中我例如不要使用會話。 – Heisenberg 2012-03-04 21:13:26

回答

0

那麼,這個觀點應該不是真的有一個狀態。它應該顯示控制器告訴它顯示的任何內容。如果您想知道選擇了哪個棋子,您可以在控制器中跟蹤該棋子,並且控制器將通過視圖模型通過正方形有效的視圖。

在控制器中保留選定部分等等的原因是因爲它是遊戲狀態的一部分,而遊戲狀態又是業務邏輯的一部分。業務邏輯屬於控制器。我假設有一個視圖模型,因爲除非模型本身相同,否則應始終存在視圖模型。在大多數應用程序中,它不是等價的,沒有視圖模型就會丟失封裝,增加視圖和控制器之間的耦合,並使整個事物更加開放地進行更改。

+0

我同意,一個觀點不應該有一個狀態。但爲什麼選擇屬於控制器? (我不是說這是一個壞主意,但我不知道,爲什麼它最適合那裏)。而且你似乎認爲有一個視圖模型,它與演示模型或多或少相同。這個視圖模型是如何實現的?它是圍繞領域模型的包裝嗎? – Heisenberg 2012-03-04 21:06:21

+0

還沒有時間在這裏登錄一段時間,但我編輯了答案來回答問題。 – Tobias 2012-03-15 20:55:55

+0

Thx爲您提供幫助!還有一個問題:你如何推薦我實現視圖模型?我是否應該包裝域模型並使用從域模型轉發數據的訪問方法,併爲視圖特定狀態提供其他方法? – Heisenberg 2012-03-24 15:16:26