设计mvc控制器层

时间:2009-12-09 12:52:19

标签: java model-view-controller controller

我正在尝试理解和实践MVC模式以改进我的开发。所以我开始重构我曾经写过的应用程序并且到目前为止已经取得了进展。我的模型看起来很清楚,到目前为止视图已经准备好了。但现在我正在寻找一个设计我的控制器层的好习惯 我创建了一个视图,它分成了不同的主要组件。让我举个简短的例子:

有3个面板将特定组件分组:

  • “FilePanel”,持有JTextField和两个JButtons
  • “DataPanel”,保存所有组件以显示一些数据和一些JButtons
  • “CalendarPanel”,显示一些日历表

这三个Panel分别位于一个单独的类中,然后在GUI类中进行实例化和排列。

没有实际问题。当我将Panel分开时,我应该如何构建控制器?每个面板应该获得自己的控制器类(FileController,DataController,CalendarController)吗?或者整个视图应该只有一个控制器类?

如果我为每个面板创建一个控制器类,我怎样才能实现控制器相互通信?示例:如果在“FilePanel”中单击了一个按钮,如何通知“DataPanel”?

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

1 个答案:

答案 0 :(得分:4)

小组是否根本分开?

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

是:他们每个人都可以独立地通过各种状态吗?这是您在“门户”样式应用程序中可能具有的那种实现。用户可以独立地在每个面板中工作 - 极端示例,在一个整体查看器中的两个单独的并排浏览器窗格。这是您在复合应用程序中获得的效果,其中用户在不同的后端系统上打开了窗口。有时,一个窗口中的用户操作会导致在另一个窗口中发生事情,但通常它们会单独运行。在这种情况下,我们可以有单独的控制器,每个控制器负责Panel的状态。他们可以通过事件处理机制相互通信。用户在文件面板中单击,查看其受控的联系人,这会发出“文件已选”事件,其有效负载是文件的ID。请注意,“click”事件将转换为非ui特定事件。

通过使用单独的控制器,我们可以解耦当前面板组的细节。添加新面板只需要新控制器注册事件。

相关问题