草庐IT

java - 瘦 Controller

coder 2024-03-08 原文

我正在接触 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。所以我有这样的东西。

这个 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/

有关java - 瘦 Controller的更多相关文章

  1. ruby-on-rails - 渲染另一个 Controller 的 View - 2

    我想要做的是有2个不同的Controller,client和test_client。客户端Controller已经构建,我想创建一个test_clientController,我可以使用它来玩弄客户端的UI并根据需要进行调整。我主要是想绕过我在客户端中内置的验证及其对加载数据的管理Controller的依赖。所以我希望test_clientController加载示例数据集,然后呈现客户端Controller的索引View,以便我可以调整客户端UI。就是这样。我在test_clients索引方法中试过这个:classTestClientdefindexrender:template=>

  2. ruby-on-rails - Rails 应用程序中的 Rails : How are you using application_controller. rb 是新手吗? - 2

    刚入门rails,开始慢慢理解。有人可以解释或给我一些关于在application_controller中编码的好处或时间和原因的想法吗?有哪些用例。您如何为Rails应用程序使用应用程序Controller?我不想在那里放太多代码,因为据我了解,每个请求都会调用此Controller。这是真的? 最佳答案 ApplicationController实际上是您应用程序中的每个其他Controller都将从中继承的类(尽管这不是强制性的)。我同意不要用太多代码弄乱它并保持干净整洁的态度,尽管在某些情况下ApplicationContr

  3. ruby-on-rails - rails : How to make a form post to another controller action - 2

    我知道您通常应该在Rails中使用新建/创建和编辑/更新之间的链接,但我有一个情况需要其他东西。无论如何我可以实现同样的连接吗?我有一个模型表单,我希望它发布数据(类似于新View如何发布到创建操作)。这是我的表格prohibitedthisjobfrombeingsaved: 最佳答案 使用:url选项。=form_for@job,:url=>company_path,:html=>{:method=>:post/:put} 关于ruby-on-rails-rails:Howtomak

  4. java - 等价于 Java 中的 Ruby Hash - 2

    我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/

  5. ruby-on-rails - 如何在 Rails Controller Action 上触发 Facebook 像素 - 2

    我有一个ruby​​onrails应用程序。我按照facebook的说明添加了一个像素。但是,要跟踪转化,Facebook要求您将页面置于达到预期结果时出现的转化中。即,如果我想显示客户已注册,我会将您注册后转到的页面作为成功对象进行跟踪。我的问题是,当客户注册时,在我的应用程序中没有登陆页面。该应用程序将用户带回主页。它在主页上显示了一条消息,所以我想看看是否有一种方法可以跟踪来自Controller操作而不是实际页面的转化。我需要计数的Action没有页面,它们是ControllerAction。是否有任何人都知道的关于如何执行此操作的gem、文档或最佳实践?这是进入布局文件的像素

  6. java - 从 JRuby 调用 Java 类的问题 - 2

    我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www

  7. java - 我的模型类或其他类中应该有逻辑吗 - 2

    我只想对我一直在思考的这个问题有其他意见,例如我有classuser_controller和classuserclassUserattr_accessor:name,:usernameendclassUserController//dosomethingaboutanythingaboutusersend问题是我的User类中是否应该有逻辑user=User.newuser.do_something(user1)oritshouldbeuser_controller=UserController.newuser_controller.do_something(user1,user2)我

  8. java - 什么相当于 ruby​​ 的 rack 或 python 的 Java wsgi? - 2

    什么是ruby​​的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht

  9. Observability:从零开始创建 Java 微服务并监控它 (二) - 2

    这篇文章是继上一篇文章“Observability:从零开始创建Java微服务并监控它(一)”的续篇。在上一篇文章中,我们讲述了如何创建一个Javaweb应用,并使用Filebeat来收集应用所生成的日志。在今天的文章中,我来详述如何收集应用的指标,使用APM来监控应用并监督web服务的在线情况。源码可以在地址 https://github.com/liu-xiao-guo/java_observability 进行下载。摄入指标指标被视为可以随时更改的时间点值。当前请求的数量可以改变任何毫秒。你可能有1000个请求的峰值,然后一切都回到一个请求。这也意味着这些指标可能不准确,你还想提取最小/

  10. 【Java 面试合集】HashMap中为什么引入红黑树,而不是AVL树呢 - 2

    HashMap中为什么引入红黑树,而不是AVL树呢1.概述开始学习这个知识点之前我们需要知道,在JDK1.8以及之前,针对HashMap有什么不同。JDK1.7的时候,HashMap的底层实现是数组+链表JDK1.8的时候,HashMap的底层实现是数组+链表+红黑树我们要思考一个问题,为什么要从链表转为红黑树呢。首先先让我们了解下链表有什么不好???2.链表上述的截图其实就是链表的结构,我们来看下链表的增删改查的时间复杂度增:因为链表不是线性结构,所以每次添加的时候,只需要移动一个节点,所以可以理解为复杂度是N(1)删:算法时间复杂度跟增保持一致查:既然是非线性结构,所以查询某一个节点的时候

随机推荐