控制器'菜单面板中的职责

时间:2015-12-14 18:22:12

标签: oop model-view-controller

我有一个带菜单面板的应用程序(文件,编辑,查看等),我尝试使用模型视图控制器模式构建它。

为整个菜单创建一个控制器是个好主意,比如使用MenuControllerFileSaveAs_clicked等方法EditCopy_clicked(假设我有另一个视图和主工具栏的控制器)等)或根据功能划分控制器的责任(ClipBoardControllerFileOperationsController等)?如果是第二个,那么如何划分观点'职责?

也许有人对大型应用程序中模型视图控制器的实际使用有任何好的资源?

谢谢!

1 个答案:

答案 0 :(得分:1)

我将如何处理这个问题,我将考虑所有可用的命令,无论我如何在用户界面中显示它,然后根据它们对模型的控制级别或类型对它们进行分组。我怀疑如果你只列出所查看模型可能的所有类型的命令,你会发现你的自然分组。

我不会根据菜单或工具栏中的组织方式做出决定。无论您的系统是由语音激活,shell命令,精神控制还是其他任何......驱动,如果您不假设它将始终使用传统桌面呈现,它将在其设计中受益GUI。

我可能会根据与其他系统(剪贴板,文件系统等)集成的性质来组织它们,但我并不喜欢这种方法。

换句话说,我的控制器是围绕我可以对模型做的事情而设计的,完全不考虑视图,并且尽可能不考虑底层集成。

作为一个人为的例子(因为你不能说出你的平台或系统的内容,除了它似乎是基于文档的),我可能会将这些命令列为可用:

  • CopySelectionToClipboard
  • CutSelectionToClipboard
  • ReplaceSelectionWithClipboardContents
  • FormatSelectionUsingClipboardContentsAsTemplate
  • CreateNewDocumentFromClipboardContents
  • ShowPreviewOfClipboardContents
  • GetListOfAvailableClipboardFormats

确切地说这些是什么或者它们将如何起作用,甚至一切都没有"剪贴板"并不重要。在名字里。这些都没有给我一种组织边界感。

相反,我会看看每个命令如何在上下文中与模型交互。前四个项目可能直接支持我的文档模型的操作,但最后两个项目不太可能被文档模型实现为操作。模型的其他部分(系统模型,域模型等)将实现这些操作。

所以我可能会有三个控制器。

  1. DocumentSelectionController
    • CopySelectionToClipboard
    • CutSelectionToClipboard
    • ReplaceSelectionWithClipboardContents
    • FormatSelectionUsingClipboardContentsAsTemplate
  2. DocumentController
    • CreateNewDocumentFromClipboardContents
  3. InformationExchangeController
    • ShowPreviewOfClipboardContents
    • GetListOfAvailableClipboardFormats
  4. 这是非常粗略的思考;我可能会重新审视并改进它。

    至于观点,我完全不确定你的意思是"如何分割观点'职责"

    视图只负责以特定方式显示模型,并且应完全独立于控制器的组织。控制器具有视图知识(它是"使用"关系)以及准备视图所需的内容;视图不了解控制器。

    如果需要更新特定视图,它可以观察模型本身,也可以由知道需要更新(或两者兼而有之)的控制器驱动。在任何一种情况下,如果要重新组织控制器中的命令,则不应更改任何视图。