2013-12-11 81 views
3

* 在MVVM添加虛擬機的主要用途*視圖的創建應該是View或ViewModel [MVVM]的一部分?

我們可以說:

  1. 視圖模型在MVVM介紹了單元測試的代碼。
    如果我們比較MVC和MVVM,MVC單元測試控制器是很難沒有查看。
    所以我們又增加了一層ViewModel用於對主代碼進行單元測試。

  2. 管理模型不會持續存在的一些非持久數據。 ViewModel是爲了管理一些非持久數據而引入的,並且根據用戶輸入將該數據保存到模型中。
    驗證模型中的數據更改並按照命令持續保存。
    管理數據綁定。

而且也是我見過最MVVM樣本命令結合conatins 視圖模型初始化一些命令的執行另一個視圖。這直接說明視圖依賴於ViewModel。

查看 - >視圖模型 - >模型

視圖模型應該是一個獨立可測試單元。

從視圖#1初始化視圖#2的代碼應該是文件後面的視圖#1代碼的一部分。

示例:

如果我想調用MessageBox(view#2)。 消息框應在視圖#1中調用,並根據消息框結果(是\否) 來執行操作,我們應該在ViewModel#1中調用適當的方法。有了這個ViewModel將是獨立於視圖,我們可以輕鬆地編寫單元測試。

+0

MVC和MVVM是解決相同問題的不同方法,但是不相關。 –

回答

4

「視圖模型在MVVM中引入了單元測試的代碼。」

不完全。正確解耦的代碼很容易測試。但這是好設計的好處,而不是原因。代碼是分離的,並且被拆分成更小的單元,因爲可以理解更小的單元,而由50'000行代碼組成的單個上帝對象類不能被完全理解。

我們打破代碼與小和有限的接口,這樣的問題可以在孤立地看,並改變一個類獨立的部件沒有通過整個系統產生連鎖反應。作爲副作用,部件變得足夠簡單,可以通過單元測試進行全面測試。

迫使開發商編寫單元測試創​​建更大的動力爲開發人員設計類權,通過使測試更難如果類的責任不明智選擇來寫。但是,如果開發人員已經在意這一點,不管單元測試如何,總是會更好。

回到ViewModel。該模型是數據。 ViewModel是呈現格式的數據。對於一個簡單的一次性程序,它們可能是相同的,但通常模型中的數據有一些限制,比如必須是可序列化的,或者是從其他地方提供的。 ViewModel更改數據的格式。

對於單個模型,您甚至可以擁有多個ViewModel,並以不同視圖以不同方式呈現數據。多個相似的視圖可以共享相同的視圖模型,儘管關係經常是1:1。

你是對的,ViewModel一定不知道View和Model不知道ViewModel。

相關問題