Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Model view controller 在桌面应用程序上用MVC实现GUI菜单_Model View Controller_User Interface - Fatal编程技术网

Model view controller 在桌面应用程序上用MVC实现GUI菜单

Model view controller 在桌面应用程序上用MVC实现GUI菜单,model-view-controller,user-interface,Model View Controller,User Interface,我正在用python中的MVC模式实现一个模块化AI测试引擎 到目前为止一切正常:AIs、鼠标、键盘都是控制器,模型是物理引擎,视图是渲染一切的pygame实例。我有一个事件处理程序来处理大多数通信 现在,我想实现一个菜单系统(想象一个游戏菜单,您可以在其中选择加载、保存、退出等)。但是我被阻止了,我不知道该如何实现它。问题是我认为它应该是部分控制器和部分视图,但我不确定 有什么想法吗? 谢谢你首先,在谈论MVC时,有几点经常被忘记: 没有模式是教条。如果最好的解决方案不是MVC,那可能意味着M

我正在用python中的MVC模式实现一个模块化AI测试引擎

到目前为止一切正常:AIs、鼠标、键盘都是控制器,模型是物理引擎,视图是渲染一切的pygame实例。我有一个事件处理程序来处理大多数通信

现在,我想实现一个菜单系统(想象一个游戏菜单,您可以在其中选择加载、保存、退出等)。但是我被阻止了,我不知道该如何实现它。问题是我认为它应该是部分控制器和部分视图,但我不确定

有什么想法吗?
谢谢你

首先,在谈论MVC时,有几点经常被忘记:

  • 没有模式是教条。如果最好的解决方案不是MVC,那可能意味着MVC不适合这个问题

    • MVC,GUI应用程序的OOD风格与MVC,web应用程序的分层体系结构有很大不同。在这种情况下,您需要第一个,那么多关于第二个的文档和文章可能不是好的建议

    • 在“GUI-MVC”中,模型-视图-控制器三元组用于每个应用程序模块;没有“模型层”、“视图层”或“控制器层”

  • 现在,针对你的具体情况

    您可以将菜单系统视为一个额外的模块,独立于现有的引擎。这个模块可以(如果您觉得方便的话)拥有自己的MVC结构。模型可以是命令列表(或树),视图可以是可见菜单,控制器可以是获取菜单事件并执行命令的调度器


    或者,整个菜单可以只是一个GUI控件;许多现有控制器中的一个。与任何GUI控件一样,它有一个可见部分。如果您的基本库足够简单,那么用于安装和管理菜单的代码可能过于简单,不足以构成复杂的内部结构。

    我喜欢将菜单系统作为额外模块的想法。我太受web应用程序视图的影响了。但即使在那时,我已经注意到需要具有自己的模型-视图-控制器结构的模块。我将整个应用程序划分为MVC的主要原因是,我可以在将来独立于模型层和控制器层替换一个视图。正如你在1中所说,我不应该试图强迫应用程序进入模式。谢谢你的回答。