JavaFX-将属性与域对象一起使用的正确方法


10

JavaFX提供了一堆新的Property对象,例如,javafx.beans.property.DoubleProperty这些对象使您可以定义可以自动观察和同步的字段。

在许多JFX示例中,MVC模型类具有许多这些Property字段,这些字段随后可以自动绑定到视图。

但是,这似乎鼓励我们将JFX属性放到我们的Domain对象中(如果您假设Model类将成为一个领域对象),这让我感到担忧是关注点分离不佳(即将GUI代码放到Domain中) )。

有没有人看到这个问题在“现实生活”中得到解决,如果是的话,它是如何做到的?


如果我错了,请指正我,但是我对JavaFX的理解是,它在Oracle购买Oracle之前于2008年被Sun搁置了,并且仅在Apple设备上淘汰Silverlight和Flash Decline后才翻新到市场。也许您是正确的,因为它与视图紧密相关,这是它在太阳下被搁置的原始原因。只是一个想法。
杰克·斯通

Sun和现在的Oracle已经在JavaFX上持续工作了几年。最近的主要转变是停止使用JavaFX所需的“ JavaFX Script”编程语言,并转而使用普通Java。这种转变是由于采用率不高以及支持一种全新的编程语言而付出的代价。
斯图尔特·马克

Answers:


4

我一直在玩JavaFX 2.0,我想您的问题是关于JavaFX 2.0的。不是真正的生产代码,只是一个个人项目,但是我遇到了您上面提到的相同问题。整个模型趋于依赖于2D框架,我不喜欢它。

我所做的就是将模型中的每个单个类一分为二,真正的模型类具有从数据库加载其内容的能力,知道它如何改变其状态等……以及决定外观的表示形式类在屏幕上。后者将包含所有Property类。

您可以在任何MVC框架(例如Swing)中找到相同的设计。只是这里没有逃避之路。


一个强迫您应用良好设计原则的框架,或者如果您不这样做,则会使您大跌眼镜。作为.NET的人,我对此非常熟悉。
MattDavey

0

将近7年后,这个问题仍然有效。

我认为,javafx绝不能由属于Model的任何类导入。但是,如果您将MVVM与MVC架构结合使用,它们可能会很好地工作。从这个意义上说

  • 实体=(域)模型(M
  • FXML文件=视图(V
  • 控制器仍然是控制器(C
  • view-model(VM)=一组新的数据类,仅包含javafx属性和对其表示的实际域对象(M)的引用。它可以将业务逻辑方法调用进一步传递给此对象,充当组合器/装饰器。

MVVM + MVC

另一种看待事物的方式是将控制器类视为视图的一部分,因为它所做的只是将视图模型与视图(数据和操作)绑定在一起。因此它可以轻松地称为Presenter甚至Binder。但是,这取决于您如何使用控制器。如果在Controller类中添加了用于操纵视图模型的逻辑,则它应有其名称,并且您已获得上面介绍的体系结构。如果控制器类仅将模型数据绑定到UI元素,将ActionEvents绑定到模型方法,那么您倾向于在下面介绍MVVM突变体体系结构。

MVPVM

我认为这些架构在某种程度上与Bob叔叔关于干净架构(表示层)的想法相匹配。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.