我应该如何为文本编辑器应用程序实现模型-视图-控制器设计?
How should I implement a Model-View-Controller design for a text editor application?
我正在用 Jython 开发一个有点类似于 Emacs 的文本编辑器,尽管在这种情况下语言并不重要。
我有一个独立的数据模型,几个视图用于菜单、文本区域和一个显示日志消息的控制台并将接收来自用户的命令,以及每个视图的 控制器 。此外,我有一个 主控制器 ,它是应用程序的入口点,将所有视图放在一起并创建视图控制器。
当用户与视图交互时,视图调用其控制器,控制器决定需要做什么。如果用户在菜单中选择一个选项来显示关于弹出窗口,菜单控制器将自行处理。但是,当菜单中的选项涉及另一个视图中的更改时,例如当用户选择关闭文件时,需要清除文本区域。在这种情况下,菜单控制器将操作委托给主控制器,而主控制器又会计算出文本区域控制器需要通知其视图清除文本。类似于:
1. User clicks "close file" in menu view
2. Menu view tells menu controller user selected "close file"
3. Menu controller delegates this actions to the Main controller since it has no access to the text area view.
4. Main controller tells text area controller to clear up text area
5. Text area controller clears up its view's text area.
我发现大多数用户操作不能由用户正在交互的视图的直接控制器处理,需要传递给主控制器,主控制器是一个巨大的class,而其他控制器只是委托操作。
这看起来不是最好的方法。我错过了什么吗?有一个更好的方法吗?我是否应该忘记中间控制器并重新考虑主控制器?
如有任何见解,我们将不胜感激。
你的设计很好。
您的 MainController 就像 J2EE 设计术语中的 FrontController(我的经验更多是 Java)。前端控制器负责将传入请求委托给适当的应用程序控制器(J2EE 设计用语),您的设计中的一个例子是 TextArea 控制器。
要全面了解 FrontController 和 ApplicationController 如何协同工作,请参阅此页面上的模式图 http://corej2eepatterns.com/index.htm。
此外,您可以在 http://www.oracle.com/technetwork/java/frontcontroller-135648.html and Application Controller at http://corej2eepatterns.com/ApplicationController.htm
上详细阅读 FrontController
要理解的基本内容是 FrontController 就像 "the" 主路由控制器或应用程序的元控制器,它将传入请求路由到适当的应用程序控制器。
我正在用 Jython 开发一个有点类似于 Emacs 的文本编辑器,尽管在这种情况下语言并不重要。
我有一个独立的数据模型,几个视图用于菜单、文本区域和一个显示日志消息的控制台并将接收来自用户的命令,以及每个视图的 控制器 。此外,我有一个 主控制器 ,它是应用程序的入口点,将所有视图放在一起并创建视图控制器。
当用户与视图交互时,视图调用其控制器,控制器决定需要做什么。如果用户在菜单中选择一个选项来显示关于弹出窗口,菜单控制器将自行处理。但是,当菜单中的选项涉及另一个视图中的更改时,例如当用户选择关闭文件时,需要清除文本区域。在这种情况下,菜单控制器将操作委托给主控制器,而主控制器又会计算出文本区域控制器需要通知其视图清除文本。类似于:
1. User clicks "close file" in menu view
2. Menu view tells menu controller user selected "close file"
3. Menu controller delegates this actions to the Main controller since it has no access to the text area view.
4. Main controller tells text area controller to clear up text area
5. Text area controller clears up its view's text area.
我发现大多数用户操作不能由用户正在交互的视图的直接控制器处理,需要传递给主控制器,主控制器是一个巨大的class,而其他控制器只是委托操作。
这看起来不是最好的方法。我错过了什么吗?有一个更好的方法吗?我是否应该忘记中间控制器并重新考虑主控制器?
如有任何见解,我们将不胜感激。
你的设计很好。
您的 MainController 就像 J2EE 设计术语中的 FrontController(我的经验更多是 Java)。前端控制器负责将传入请求委托给适当的应用程序控制器(J2EE 设计用语),您的设计中的一个例子是 TextArea 控制器。
要全面了解 FrontController 和 ApplicationController 如何协同工作,请参阅此页面上的模式图 http://corej2eepatterns.com/index.htm。
此外,您可以在 http://www.oracle.com/technetwork/java/frontcontroller-135648.html and Application Controller at http://corej2eepatterns.com/ApplicationController.htm
上详细阅读 FrontController要理解的基本内容是 FrontController 就像 "the" 主路由控制器或应用程序的元控制器,它将传入请求路由到适当的应用程序控制器。