2009-12-09 87 views
1

我想了解和实践MVC模式以改善我的开发。所以我开始重构一个我曾经写过并且已经取得进展的应用程序。这是完全清楚的,我的模型是什么样子,并且视图已经准备好了。但是现在我正在寻找一个设计我的控制器层的好实践。
我创建了一个分为不同主要组件的视图。让我给你一个简单的例子:设计mvc控制器层

有3个小组该组特定的组件:

  • “FilePanel”,拿着一个JTextField和两个Jbutton将
  • “dataPanel上”,拿着所有组件neccessary显示一些数据和一些Jbutton将
  • “CalendarPanel”,显示部分日历表

这三个面板分别在一个单独的类和实例化之后和ar在一个GUI类中。

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

如果我为每个面板创建一个控制器类,如何才能实现控制器之间的通信?例如:如果在“FilePanel”中点击一个按钮,我该如何通知“DataPanel”?

你能举几个最佳实践的例子吗?

回答

4

面板从根本上分离吗?

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

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

通过使用独立的控制器,我们将当前一组面板的细节去耦。添加一个新面板只需要新控制器注册事件。

+0

谢谢,这使我的决定更清晰。我想在我的情况下,一个控制器应该足够。 – Ham 2009-12-09 13:54:03