我看到很多类似的javafx代码:
private Button getButton(){
Button myButton = new Button("A button");
myButton.setOnAction...
}
private HBox toolbar(){
Button file = new Button("File");
Button edit = new Button("Edit");
Button props = new Button("Properties");
HBox toolbarArea = new Hbox();
toolbarArea.getChildren().add(file, edit, props);
}
我有兴趣解释为什么要这样做(我还没有找到)。
答案 0 :(得分:2)
小方法适用于互联网演示代码
而不是使用小方法来定义UI元素,替代方案是:
小方法减少了对预先声明的对象和程序状态的依赖性。通常小方法是自包含的,并且它们的任何输入都在它们的参数列表中 - 它更容易阅读和理解它们而不需要理解大量的上下文信息,并且更容易对方法进行单元测试或将方法应用于更具功能性的编程风格,重用lambda调用中的方法等。小方法的名称也使它们自我记录,因此代码更易读,无需添加额外的注释。
因此,在互联网上看到的许多小型示例JavaFX应用程序中,您将找到描述UI元素的小方法,尽管这种方法并不总是您在构建更大的时候应该使用的方法应用
使用小方法进行UI组件定义是extract-till-you-drop编程方法的一个示例。当然,正如您在链接提取博客的评论中所看到的,一切都是值得商榷和自以为是,所以请使用您的最佳判断,但如果有疑问,我会赞成或方法提取,而不仅仅是在UI中定义代码,但也在您的功能代码中。
具体示例
看看discussion of JavaFX programming style in the comments on this blog。这是基于此original clock app sample,它不使用小方法,而updated clock app sample是基于许多小方法构建的。 Pernd的Lundholm对原始代码的评论是:
不正确的典型标志是你写评论时。不要在代码中写注释,编写没有注释的读取代码! 我读了你的代码,我认为它几乎是不可读的,并且尊重。这是一个很长的方法,散布着很少或没有意义的常量。如果给我这样的代码来改变,那么只修复一个小bug,我开始提取方法直到我丢弃。这是理解代码的最快方式。
我建议您查看两个示例代码库并确定您希望维护哪些代码库。我的猜测是你将决定使用许多小方法的版本更容易阅读和维护。
对较大的应用程序使用声明性FXML和CSS
另外请注意,对于许多大型应用程序,使用FXML和CSS优于java代码来定义和设置UI元素 - 这是因为定义UI的很大一部分通常更容易使用声明来维护语法而不是程序或功能语法,FXML本质上是声明性的(加上它通过SceneBuilder和IDE FXML支持完全加工)。研究SceneBuilder code base,了解如何使用FXML和CSS定义更大的UI。