JavaFX-如何将模型与viewmodel分离

JavaFX-如何将模型与viewmodel分离,java,javafx,mvvm,data-binding,viewmodel,Java,Javafx,Mvvm,Data Binding,Viewmodel,我正试图理解并将JAVAFX用于一个学校项目 我读过的几乎所有教程都说,我们使用的是MVVM(模型视图模型)。但它们只是使用一个视图和一个视图模型(请参见,此处没有模型) 我想将模型与视图模型(因此与视图)分离。我不想在模型类中引用gui包。所以这里没有JavaFx属性 所以,我试过: 比方说,我有一个名为Person的类 public class Person { private String name; private String street;

我正试图理解并将JAVAFX用于一个学校项目

我读过的几乎所有教程都说,我们使用的是MVVM(模型视图模型)。但它们只是使用一个视图和一个视图模型(请参见,此处没有模型)

我想将模型与视图模型(因此与视图)分离。我不想在模型类中引用gui包。所以这里没有JavaFx属性

所以,我试过: 比方说,我有一个名为Person的类

public class Person {
        private String name;
        private String street;

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public String getStreet() {
            return street;
        }

        public void setStreet(String street) {
            this.street = street;
        }
    }
和一个名为PersonViewModel的ViewModel

public class PersonViewModel  {

    private Person underlyingObject = new Person();
    private SimpleStringProperty name;
    private SimpleStringProperty street;

    public String getName() {
        return underlyingObject.getName();
    }

    public SimpleStringProperty nameProperty() {
        return name;
    }

    public void setName(String name) {
        this.underlyingObject.setName(name);
        this.name.set(name);
    }

    public String getStreet() {
        return underlyingObject.getStreet();
    }

    public SimpleStringProperty streetProperty() {
        return street;
    }

    public void setStreet(String street) {
        this.underlyingObject.setStreet(street);
        this.street.set(street);
    }
}
这种方式意味着有太多的代码和太多可能忘记某些东西的方式(当您添加或删除模型的成员时)。双向绑定也是一大难题

有人知道更好的方法吗


我希望我的模型类是“无gui”的,因为有一天它们必须转移到服务器项目中。如果没有办法将模型与viewmodel分开,那也没关系,但是我们应该停止在Java中称它为MVVM。

我不清楚使用JavaFX属性是否违反了“无GUI”的类。JavaFX属性类本质上与GUI无关,除了它们是在一个以
javax.
开头的包中定义的。包的名称不会使类成为UI类。但是,考虑在模型中使用绑定JavaBean属性,然后使用JavaBeAnPrimyType适配器类,例如@ @ JAMESYD,我认为它是GUI相关的,因为如果有一天我决定返回Swing(或另一个框架),我希望我的模型(GUI无关类)可以像以前那样工作,因为它们只是数据容器。但是谢谢你的有趣链接,它肯定会帮助我实现我想要的!没有任何东西可以阻止您在Swing应用程序中使用JavaFX属性。属性和绑定API可以很容易地分解成一个单独的库——它们根本不依赖JavaFX工具包。(例如,JavaFX并发API的情况并非如此。)