Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在JavaFX聊天应用程序中同步模型和视图模型_Java_Javafx_Mvvm_System Design_Mvvmfx - Fatal编程技术网

如何在JavaFX聊天应用程序中同步模型和视图模型

如何在JavaFX聊天应用程序中同步模型和视图模型,java,javafx,mvvm,system-design,mvvmfx,Java,Javafx,Mvvm,System Design,Mvvmfx,我正在使用JavaFX和MvvmFX构建聊天应用程序,并遇到了一些系统设计挑战 我想避免在我的模型中使用FX可观察列表,因为我的模型可以在多线程环境中更新,而且我根本不需要我的模型依赖于JavaFX。 因此,模型将是简单的jdk列表,视图模型将是受视图约束的可观察JavaFX列表 但是,保持模型和视图模型同步的正确方法是什么 例如,当新联系人添加到模型列表中,或联系人状态更改时,模型将更改->因此视图模型也需要更改 有一种解决方案,比如Glalled List,它提供了一些附加功能,比如集合的内

我正在使用JavaFX和MvvmFX构建聊天应用程序,并遇到了一些系统设计挑战

我想避免在我的模型中使用FX可观察列表,因为我的模型可以在多线程环境中更新,而且我根本不需要我的模型依赖于JavaFX。
因此,模型将是简单的jdk列表,视图模型将是受视图约束的可观察JavaFX列表

但是,保持模型和视图模型同步的正确方法是什么

例如,当新联系人添加到模型列表中,或联系人状态更改时,模型将更改->因此视图模型也需要更改

有一种解决方案,比如Glalled List,它提供了一些附加功能,比如集合的内置更改侦听器,但感觉也不是理想的解决方案。但即使我使用它,每次它触发时,我都需要重建我的视图模型或编写一些逻辑,以确定模型中的哪些项被更改为在VM中同步


以前有人解决过这个问题吗?请分享你的想法!提前谢谢

这是一个非常有趣的问题,我也做了一些调查。我的结论是,在纯Java环境中,反应流可能是一种发展方向。在Kotlin中,您甚至可以更好地使用协程和流。

无论您做什么,您都可能需要多线程环境中列表的包装器来调用对FXAT上的ObservableList的更改。这看起来很容易实现,除非您有疯狂的并发问题需要在FXAT上解决为异步事件。也许值得一看:我还推荐RxJavaFX。我过去曾将RxJavaFX与mvvmFX一起使用过,效果非常好。但是,您必须具备一些RxJava知识才能正确处理并发性问题。只要所有的更改都在FX线程上完成,JavaFX部分就没有那么大的问题,这就是RxJavaFX的全部内容。