Architecture 视图模型的责任

Architecture 视图模型的责任,architecture,mvvm,Architecture,Mvvm,我正在构建一个工具,其目标是根据几个参数下载一个文件 第一步是设置(或检索)这些参数 FileDownloadsManager检索不同的参数集(比如通过配置文件):它确切地知道要使用哪些参数来下载正确的文件 这些参数存储在一个类中,我有一个这个类的实例列表 这意味着我可以下载带有多个可能参数集的文件 围绕这些参数集,我构建了ParametersSetViewModels,以便可以在列表中显示它们,并添加一些仅视图属性。在内部,ParametersSetViewModels引用了用作视图模型成员源

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

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

FileDownloadsManager检索不同的参数集(比如通过配置文件):它确切地知道要使用哪些参数来下载正确的文件

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

这意味着我可以下载带有多个可能参数集的文件

围绕这些参数集,我构建了ParametersSetViewModels,以便可以在列表中显示它们,并添加一些仅视图属性。在内部,ParametersSetViewModels引用了用作视图模型成员源的基础参数集

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

这应该是谁的责任

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


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

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

也许应该改名为MVCVM?

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

虽然可以忽略/避免,但控制器负责决定要显示的数据模型和视图。ViewModel是模型(MVVM中的M)和视图之间的桥梁。这允许更简单的“分离”XAML创作


在回答您的问题时,处理应由控制器处理。如果需要更新ViewModel以显示繁忙的指示器等,则可以,但这不是视图、模型或ViewModel的责任

感谢您的见解,特别是对“MVCVM”的反思:这绝对值得一提:控制器仍然活着!我认为考虑模型/文档模式也是有用的,其中控制器和视图是相互依存的,将它们组合到一个类中是有意义的。当文档变得足够复杂时,有必要对其进行重构以分离视图和控制器类。我认为MVVM=>MVCVM也处于类似的位置。@书法io:这取决于具体的实现。新的Razor页面就是一个很好的例子。