LOB场景的MVVM建模问题

时间:2011-03-01 22:26:53

标签: mvvm

我已经阅读了很多关于MVVM的介绍级教程,当然可以看到它的优点,但我很难将它应用到我的LOB应用程序中。我计划使用MVVM Light,但我认为这不会影响我的VM的整体设计结构。

假设我想写一个TaxiDispatcher应用程序,我每分钟都有一个服务,并获取每辆出租车的最新状态。我还有一份固定位置列表,人们可以拨打电话并要求出租车。然后调度员将可用的出租车分配到该位置。在任何给定时间,每辆出租车将可供调度员使用或分配到特定位置之一以便接载客户。

我的主屏幕(我们称之为DispatcherView)将包含屏幕左侧的可用出租车列表,然后是另外两个可视内容:我的位置列表(无论是否有人在那里)请求服务,哪个出租车已被分配到该位置等...)和出租车分配列表(自分配以来经过的时间,位置等)。

所有这3个视图都使用相同的2个来源:出租车数据服务和我可以派出租车的地点列表。现在,我为3个视图(UnassignedTaxisVM,DispatchLocationsVM和AssignedTaxisVM)中的每个视图提供了单独的视图和视图模型,每个视图都注入了一个或两个数据源。当调度员从未分配的列表中分配出租车时,我使用Messenger与其他VM通信,让他们知道出租车已被分配到某个位置(DispatchLocationsView和AssignedTaxisView都因此更新了这个新信息) 。但是当我连接每个虚拟机时,我不得不向每个虚拟机注入相同的数据源,因此必须在每个虚拟机中编写类似的代码,以便在调度员将出租车分配给某个虚拟机时响应该命令。地点。可能只是我缺乏框架的经验,但它对我来说闻起来很糟糕。

简单地拥有一个VM(DispatcherVM)并让DispatcherView负责渲染所有3个可视内容是否更有意义?我设想这将涉及在我的DispatcherVM中有3个ObservableCollections(UnassignedTaxis,Locations,AssignedTaxis)并绑定每个子视图的数据源。当新的数据来自我的出租车数据服务时,我会解析/更新到相应的ObservableCollection并让我的观点以这种方式响应。

这里的最佳做法是什么?我有相同基础数据的3个不同但相似的“视图”。我应该为每个视图创建单独的VM,还是让一个VM公开一个视图,该视图通常由3个单独的列表/数据网格等组成。?

1 个答案:

答案 0 :(得分:0)

听起来你在ViewModels上有可重复使用的管道。您是否考虑过使用继承(例如ViewModelBase类)来重用该管道?如果继承不适合您的解决方案,您可以使用由主ViewModel坐标的子ViewModel组成的一个主VM的路径。

在我看来,这两种模式都是同等优秀的解决方案。如果没有很多背景,很难知道哪个更合适。