【问题标题】:About view models and interfaces关于视图模型和界面
【发布时间】:2011-07-17 05:28:27
【问题描述】:

我正在开发 WPF Prism 应用程序,一切正常。我的视图模型都有接口,由 MEF 注入。

但是,我并不真正了解视图模型接口的好处。毕竟,一个视图是和它的视图模型绑定的,所以我认为永远不会有其他的实现。

其实,我的视图也有接口。看来这也太矫情了吧?

所以我的问题是:我不能只删除所有视图和视图模型接口并直接注入视图和视图模型吗?是否有任何理由保留视图和视图模型的接口?

谢谢, 升

【问题讨论】:

    标签: mvvm interface view model


    【解决方案1】:

    这是一个矫枉过正。我知道您可能想模拟您的 ViewModel,但我认为实用更重要。另外,你为什么还要模拟你的 ViewModel?任何需要模拟的逻辑都应该放入服务类恕我直言。

    【讨论】:

    • 这确实也是我的第一个想法。似乎优势在于,如果您有多个视图模型,您可以测试其中一个并模拟其他的。我只是想知道我是否会这样做......大多数逻辑确实在注入的“服务”中,可以替换我的模拟实现。
    【解决方案2】:

    接口 ViewWModel 可以让您在测试中模拟它们,接口 Views 看起来确实有些矫枉过正。你不会交换你的视图,并且 UI 测试可以在你的 ViewModel 的模拟上完成,所以我认为你真的不需要接口它们。

    【讨论】:

    • 为什么要在测试中模拟您的 ViewModel?我只是使用实际的 ViewModel。
    • 我会模拟 ViewModel 以将期望放入其中。这样我就知道在测试视图时视图应该是什么样子。我还可以编写测试,用数据填充 ViewModel 并在测试期间提供它们。确实是一模一样。
    • 谢谢,我是否正确地说在接口视图模型中并没有太多附加值,因为: 1. 我们不需要模拟它们,因为它是视图模型本身必须进行测试。 2. 因此,模拟一个子视图模型没有多大意义,因为我们还想测试实际的模型。 3. 为了测试视图,我们只用数据填充实际的视图模型。 4. 由于视图与其视图模型耦合,因此总是有 1 个实现。
    【解决方案3】:

    我能想到的 ViewModel 接口的最大原因是您可以编写实现这些接口的模拟,以便在单元测试时使用。由于一个 ViewModel 可能会与另一个 ViewModel 通信,因此您可以在测试第一个 ViewModel 时将第二个 ViewModel 行为存根。

    MVVM 模式可以更轻松地对类进行单元测试,因为它将数据和控件与 UI 层(更难编写单元测试)分开。不过,就我个人而言,我不会为自己的视图编写接口。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-02
      • 2022-12-25
      • 1970-01-01
      • 2017-10-28
      • 2017-09-01
      • 2010-12-27
      相关资源
      最近更新 更多