2011-03-01 14 views
0

我已經瀏覽了MVVM的許多入門級教程,當然可以看到它的優點,但我很難將其應用到我的LOB應用程序。我打算使用MVVM Light,但我認爲這不會影響我的虛擬機的整體設計結構。針對LOB場景的MVVM建模問題

假設我想寫一個TaxiDispatcher應用程序,我有一個服務每分鐘出去並獲取每個出租車的最新狀態。我還有一個人們可以撥打併要求出租車的固定位置列表。調度員然後將可用的出租車分配給該位置。在任何給定的時間,每輛出租車可以供調度員使用,或者分配給其中一個特定地點以接送客戶。

我的主屏幕(我們稱之爲DispatcherView)將包含屏幕左側的可用出租車列表,然後是兩個額外的可視內容:我的位置列表(無論是否爲人那裏有請求服務,哪個出租車已被分配到該地點,等等。)和出租車分配列表(自分配後的經過時間,位置等)。

所有這三種觀點都有相同的兩個來源:出租車數據服務和我可以派出租車到的我的位置列表。現在,我爲3個視圖中的每一個(UnassignedTaxisVM,DispatchLocationsVM和AssignedTaxisVM)分別提供了不同的視圖和視圖模型,每個視圖都注入了一個或兩個數據源。當調度員從未分配列表中分配出租車時,我使用Messenger與其他VM進行通信,讓他們知道出租車已被分配到某個位置(因此DispatchLocationsView和AssignedTaxisView都會隨此新信息一起更新) 。但是,當我連接每個虛擬機時,我不得不向每個虛擬機注入相同的數據源,因此必須在每個虛擬機中編寫類似的代碼,以便在調度員將出租車分配給位置。這可能只是我對這個框架缺乏經驗,但它對我來說味道不好。

簡單地使用一個VM(DispatcherVM)並讓DispatcherView負責渲染所有3個可視內容是否更有意義?我想這將涉及在我的DispatcherVM中擁有3個ObservableCollections(UnassignedTaxis,Locations,AssignedTaxis)並綁定每個子視圖的數據源。當我的出租車數據服務提供新數據時,我會解析/更新到適當的ObservableCollection,並讓我的觀點以這種方式迴應。

這裏最好的做法是什麼?我有3個截然不同的,但相同的底層數據的「觀點」。我應該爲每個視圖創建單獨的虛擬機,還是讓一臺虛擬機暴露一個視圖,這個視圖基本上由3個獨立的列表/數據網格等組成。

回答

0

這聽起來像你有跨ViewModels可重複使用的管道。你有沒有考慮過使用繼承(例如ViewModelBase類)來重用這個管道?如果繼承不適合您的解決方案,則可以使用由ViewModel主協調的子ViewModel組成的主虛擬機的路由。

在我看來,這兩種模式在高層次上都是同樣好的解決方案。沒有很多背景知識,很難知道哪個更合適。