ViewModel的责任

时间:2010-08-16 22:21:11

标签: architecture mvvm

我正在构建一个工具,其目标是根据一些参数下载文件。

第一步是设置(或检索)这些参数。

FileDownloadsManager检索不同的参数集(假设通过配置文件):它确切地知道要下载正确文件的参数。

这些参数存储在一个类中,我有一个这个类的实例列表。

这意味着我可以使用多个可能的参数集下载我的文件。

围绕这些ParameterSets,我构建了ParametersSetsViewModels,以便我可以在列表中显示它们,并添加一些View-Only属性。在内部,ParametersSetsViewModels具有对底层ParametersSets的引用,这些ParametersSets用作View Model成员的源。

现在,当我选择我的参数集时,我希望下载相关文件。

这应该是谁的责任?

我有这种感觉,如果ViewModel过于活跃,通过一个返回下载文件的方法,这将违背MVVM模式;你对此有何看法?

奖励:使用BackgroundWorkers或WebClient的异步方法在后台下载应该是可行的。

1 个答案:

答案 0 :(得分:20)

在我看来,每个人都认为MVVM没有控制器,因为他们忽略了C. MVVM实际上是MVC的一种变体,“只是添加了ViewModels”。

也许它应该被称为MVCVM?

ViewModels仅用于从视图中卸载“GUI”代码并包含任何用于绑定的数据。 ViewModels不应该进行任何处理。一个很好的测试是,您的ViewModel可以通过自动化单元测试进行测试,并且不依赖于数据源等。他们应该不知道数据实际来自哪里(或谁在显示它)。

尽管可以忽略/避免,但Controller负责决定显示哪些数据模型以及在哪些视图中显示。 ViewModel是Models(MVVM中的M)和Views之间的桥梁。这允许更简单的“分离”XAML创作。

在回答您的问题时,处理应由控制器处理。如果需要更新ViewModel以显示忙碌指标等,那么它不是View或Model或ViewModel的责任。