2010-08-30 79 views
7

我打算首次在MVVM模式之後編寫一個WPF應用程序,但有些東西對我來說不太清楚。比方說,視圖有一個「保存」按鈕,當它被擊中時,我需要保存我的數據(模型)的當前狀態。這將通過向SOAP服務發送SOAP消息來完成。WPF MVVM服務層

在我的MVVM設置中,這些SOAP請求/響應處理程序的位置在哪裏?只要保存按鈕被擊中,視圖模型是否自己調用SOAP?視圖模型應該通知模型自己保存嗎?也許這是另一種方式,與MVVM完全分開?

我的想法是(至少在這個特定情況下)視圖模型會處理它,因爲它需要禁用視圖中的保存按鈕,直到當前保存請求完成。

+0

我開始寫一個答案,然後說出自己,然後+1,而不是。我的直覺是模型應該處理它,因爲大多數ViewModel使用模型的DataContext,但這並不是真的更新模型本身,而是模型之外的東西...... – 2010-08-30 19:40:47

回答

5

我通常在viewmodel和SOAP/WCF/Webservice層之間放置一個邏輯客戶端應用程序/業務層。這一層是所有非視圖業務邏輯和處理邏輯所在的地方。請記住,視圖模型是視圖的模型,而不是域的模型。因此,您希望儘快將控制權交給下一層。

在這種情況下,我會讓視圖在viewmodel上觸發一個保存命令,該命令將依次調用到應用程序層中,從而調用遠程服務。

4

ViewModel,不應該做這樣的操作。它只應該觸發它。因此模型必須這樣做(或另一個負責加載和保存操作的中間層,而不是ViewModel本身)。

ViewModel可以觀察保存操作並可以提供關於視圖進度的狀態信息。

0

我會創建一個可由ViewModel訪問的服務處理程序。將它傳遞給viewmodel的構造函數,並調用服務處理程序公開的方法。