【问题标题】:Responsibility of a ViewModelViewModel 的职责
【发布时间】:2012-04-29 23:39:39
【问题描述】:

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

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

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

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

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

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

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

这应该是谁的责任?

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

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

【问题讨论】:

    标签: architecture mvvm


    【解决方案1】:

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

    也许它应该被称为 MVCVM?

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

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

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

    【讨论】:

    • 感谢您的洞察力,尤其是对“MVCVM”的反思:这绝对是值得一说的:控制者还活着!
    • 我认为考虑模型/文档模式也很有用,其中控制器和视图是如此相互依赖,因此将它们组合成一个类是有意义的。当 Document 变得足够复杂时,投资重构它以分离 View 和 Controller 类是有意义的。我认为 MVVM => MVCVM 的位置相似。
    • @calligraphic-io:这取决于具体的实现。新的 Razor 页面就是一个很好的例子。
    猜你喜欢
    • 2013-12-09
    • 2013-03-16
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    • 1970-01-01
    • 2016-10-21
    • 1970-01-01
    相关资源
    最近更新 更多