gpt4 book ai didi

java - 瘦 Controller

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:25:48 26 4
gpt4 key购买 nike

我正在接触 javafx。这就是我正在做的。

FXML Views
DI Controllers
Weld-SE Managed Services and Models
Trying to confine UI to FXML
Trying keep the Controllers thin

问题:

在尝试编写 UI 代码时,大多数静态 UI 都被限制在 fxml 中。但在某些情况下,我发现自己可以添加、删除、显示、隐藏元素等。

我发现自己在 Controller 内部执行此操作,因为 fx 允许我在 View 中配置 Controller 方法,它将调用特定的操作/事件。所有这些代码都处理动态 UI 构建/操作并且属于 View 层。但是,它最终会在 Controller 中使 Controller 变胖。

javafx 提供 javascript 集成。这是一种将 View 操作代码抽象出来的可能方法。但这会在组合中添加不太完美的 javascript。

我如何在 java 或 fxml 中抽象出代码,以免破坏瘦 Controller 范例?

编辑

@assylias

同意,我已经考虑过这种方式,java类和fxml一起成为一个可重用的小部件。但是,我如何将其连接到 FXML 中。 FXML 除了 Controller 什么都不懂。假设我使用 fx:controller 将这个 View 类连接到 fxml 中,而不是将其命名为 controller。所以我有这样的东西。

enter image description here

这个 View 类只有 View 操作代码。然后我会创建另一个 Controller 类。但是我希望以某种方式将表单数据填充到这个 Controller 中。这应该只在用户提交表单时发生。所以在某种程度上,我需要以某种方式告诉 javafx UI 操作请求/事件不同于实际的数据操作请求/事件。

您的想法,抱歉,如果它冗长。试图用尽可能少的词来表达它。

最佳答案

我认为最简单的解决方案是记住 FXML 中指定的 Controller 是 View Controller 。它的目的是包含修改和更新 View 的代码,而不是包含传统的 MVC Controller 代码或业务逻辑。

例如,在我目前正在进行的项目中,我将 JavaFX 与 Akka Actors 结合使用.该应用程序是用 scala 编写的。 JavaFX View Controller 包含修改 View 所需的任何代码。一个屏幕包含一个登录表单。当用户点击登录按钮时, View Controller 简单地创建一条包含用户名和密码的消息,并将该消息发送给负责执行业务逻辑的参与者。如果该 actor 确定存在错误,那么它会将消息发送回 View Controller ,并且 View Controller 可以决定需要在屏幕上进行哪种更新。

我发现将 akka actor 与 JavaFX 结合使用可以极大地简化应用程序的编码,原因至少有两个。

  1. 由于使用参与者系统要求在参与者之间发送消息,因此表示代码和业务代码之间存在自然界限。来回传递的消息形成了这个自然边界。
  2. 使用 actor 完全取代了使用线程/任务的复杂性。它完全消除了为长时间运行的进程编写 javafx.concurrent.Task 代码的需要。

关于java - 瘦 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14714174/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com