【问题标题】:View related commands in MVVM application查看 MVVM 应用程序中的相关命令
【发布时间】:2016-10-22 21:41:20
【问题描述】:

我受到文章 Decouple the View and its behavior to create a testable UI 的启发,想用 MVVM pattern 重新设计我的 JavaFX 应用程序。


(来源:s-msft.com
.

理想情况下,View Model 应该是 View 独立的,并且可以像通常的 Java 类一样进行测试。 MVVM 也使用 Command 概念从 View 更改 View Model。因此,Command 实现是 View Model 实现的一部分,可以简单地进行测试。

问题是如果命令的结果是视图更改,应该如何实施命令?例如。在 View_1 中我有一个按钮,按下它后应该创建并显示一个新视图(例如 View_2)。这样的命令是否应该是视图的一部分并且根本不可测试?

【问题讨论】:

  • 没有真正回答你的问题:看看Reactive Modeling。这是 Volkswagen Group Research 使用的建模和实现视图更改(尤其是在 JavaFX 中)的范例。
  • @beatngu13 坦率地说,还没有理解大众汽车创建 UI 的方法。介绍太理论化了。
  • 我同意演示文稿可以更清晰一些。如果您有兴趣,请提出相应的问题,我会向您解释。

标签: java mvvm javafx


【解决方案1】:

我认为命令是可测试的。我不确定您将如何切换视图,但在 JavaFX 中的 AFAIK 有类似 Scene 和 Stage 之类的东西,它是场景的父级,对吗?

因此,在您的命令中,您将 Stage 作为依赖项传递,并在执行时将其设置为新场景。

您可以轻松地在单元测试中对其进行测试 - 您可以模拟 Stage 并检查命令是否将正确的场景传递给它。

我不记得 JavaFX 的确切细节,但我会这样实现它:

class SwitchSceneCommand {
    protected Stage stage;
    protected Scene originalScene; // you can keep original scene if you want to have some undo-redo functionality
    protected Scene newScene;        

    public SwitchSceneCommand(Stage stage, Scene originalScene, Scene newScene)
    {
        this.stage = stage;
        this.originalScene = originalScene;
        this.newScene = newScene;
    }

    public void execute()
    {
         this.stage.setScene(this.newScene);
    }
 }

【讨论】:

  • 这正是我试图避免的——测试纯可视化 UI 组件。
猜你喜欢
  • 2011-11-23
  • 2013-03-06
  • 1970-01-01
  • 2012-08-29
  • 1970-01-01
  • 2020-11-26
  • 2012-10-09
  • 2011-10-15
  • 1970-01-01
相关资源
最近更新 更多