在MVVM应用程序中查看相关命令

时间:2016-10-22 21:41:21

标签: java mvvm javafx

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

MVVM pattern

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

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

1 个答案:

答案 0 :(得分:0)

我认为命令可以测试。我不确定你究竟要切换视图,但是JavaFX中的AFAIK就像场景和舞台一样是场景的父级,是吗?

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

你可以在单元测试中轻松测试它 - 你可以模拟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);
    }
 }
相关问题