java - 设计mvc Controller 层

标签 java model-view-controller controller

我正在尝试理解和实践 MVC 模式以改进我的开发。所以我开始重构我曾经写过的一个应用程序,并取得了目前的进展。完全清楚我的模型是什么样子的,而且到目前为止 View 已经准备就绪。但现在我正在寻找设计 Controller 层的良好实践。
我创建了一个分为不同主要组件的 View 。让我给你一个简短的例子:

有 3 个面板对特定组件进行分组:

  • “FilePanel”,包含一个 JTextField 和两个 JButtons
  • “DataPanel”,包含显示一些数据和一些 JButton 所需的所有组件
  • “CalendarPanel”,显示一些日历表

这三个面板各自在一个单独的类中,然后实例化并排列在一个 GUI 类中。

没有真正的问题。当我分开面板时,我应该如何构建 Controller ?每个面板是否应该有自己的 Controller 类(FileController、DataController、CalendarController)?或者整个 View 应该只有一个 Controller 类?

如果我为每个面板创建一个 Controller 类,我如何实现 Controller 之间的通信?示例:如果在“FilePanel”中单击了一个按钮,我该如何通知“DataPanel”?

你能给我一些最佳实践的例子吗?

最佳答案

这些小组从根本上是分开的吗?

否:一组面板基本上是一种状态。例如,面板代表一个控制台,显示受控制的相同项目的不同方面。用户选择一个项目,所有其他面板都会更新以显示该项目的 View 。在这种情况下,一个 Controller 就足够了。

YES:那就是他们每个人都可以独立地通过各种状态吗?这是您在“门户”风格的应用程序中可能拥有的那种关系。用户可以非常独立地在每个面板中工作——极端的例子,在一个整体查看器中有两个独立的并排浏览器面板。这是您在复合应用程序中获得的效果,其中用户在不同的后端系统上打开窗口。有时,一个窗口中的用户操作会导致另一个窗口中发生一些事情,但通常它们是分开运行的。在这种情况下,我们可以有单独的 Controller ,每个 Controller 负责面板的状态。它们可以通过事件处理机制相互通信。用户在文件面板中单击,View 与其控件联系,它发出“File Selected”事件,其有效负载是文件的 id。请注意,“点击”事件被转换为非 UI 特定事件。

通过使用单独的 Controller ,我们分离了当前面板集的细节。添加新面板只需要新 Controller 注册事件。

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

相关文章:

Java - 一种判断集合是否有序的方法

java - 给定一个整数数组 arr,编写一个函数,当且仅当数组中每个值出现的次数唯一时返回 true

java - 将消息记录到 JUnit 控制台

java - HTTP 状态 405 - 请求方法 'POST' 不支持 Spring Security Java Config

python - Re-factoring To MVC pattern——view与controller分离的疑惑

css - 编辑 <li> 的 innerhtml 以添加带有图标图像的 <i> 标签

JavaFX - 主 Controller 调用子 Controller 的函数,导致空指针异常

java - 从 spring util 列表中删除 bean

php - 如何压缩此代码以从 Laravel Controller 向 View 发送信息?

symfony - bundle 不存在: Symfony2