代码之家  ›  专栏  ›  技术社区  ›  Ham Vocke

mvc控制器层的设计

  •  1
  • Ham Vocke  · 技术社区  · 16 年前

    我试图理解和实践MVC模式,以改进我的开发。因此,我开始重构一个我曾经编写过的应用程序,并取得了进展。这是完全清楚我的模型是什么样子的,而且到目前为止视图已经准备好了。但是现在我正在寻找一个好的实践来设计我的控制器层。
    我已经创建了一个视图,该视图分为不同的主要组件。让我举一个简短的例子:

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

    • “FilePanel”,包含一个JTextField和两个JButton
    • “日历面板”,显示一些日历表

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

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

    如果我为每个面板创建一个控制器类,如何实现控制器之间的通信?示例:如果在“文件面板”中单击按钮,我如何通知“数据面板”这一点?

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

    1 回复  |  直到 16 年前
        1
  •  4
  •   djna    16 年前

    面板基本上是分开的吗?

    是的,也就是说,他们每个人都能独立地通过不同的州吗?这就是“门户”式应用程序中可能存在的关系。用户可以非常独立地在每个面板中工作——极端的例子是,在一个整体查看器中有两个单独的并排浏览器窗格。这是用户在不同的后端系统上打开窗口的复合应用程序中得到的效果。有时,一个窗口中的用户操作会导致另一个窗口中发生事件,但通常它们是分开运行的。在这种情况下,我们可以有单独的控制器,每个控制器负责面板的状态。它们可以通过事件处理机制相互通信。用户单击“文件”面板中的“视图”联系其受控对象,这将发出一个“文件选定”事件,其有效负载是文件的id。请注意,“单击”事件被转换为非特定于ui的事件。

    通过使用单独的控制器,我们将当前面板集的细节解耦。添加新面板仅要求新控制器注册事件。