MVC:命令行应用程序的实现问题

MVC: troubles of realization in command line application

本文关键字:实现 问题 应用程序 命令行 MVC      更新时间:2023-10-16

我正在写一个小型纸牌游戏,我被卡住了。只是一些基本的:1) 视图观察模型2) 控制器决定何时显示输出窗口和何时显示输入窗口3) 模型做所有的数学

看起来我的控制器必须是模型的观测者,这很糟糕,而且据我所知,也是错误的。

我的情况是:有时用户必须做出选择并通过命令行进行确认。

char View::getPlayersChoice
{
while ( cin>>choice )
{
if ( choice == 'y' || choice == 'n' )
controller.getPlayersChoice( choice )
else
cout<<"Invalid input. Please try again."
}
}

因此,不知何故,我的控制器必须知道时机何时到来,并调用View的函数getPlayersChoice。我唯一的看法是:1) 模型需要一些用户输入2) 模型告诉控制器:"嘿,给我输入!"3) 控制器说"好"并调用view.getPlayersChoice4) 控制器向模型提供输入

但同样,模型应该对控制器和视图一无所知。那么,我应该如何解决这个问题呢?感谢的帮助

第页。S我有一个想法:也许我应该创建一些类似事件的东西,并将其作为参数传递,比如observer.update( eventThatHappened )。View获取事件,调用适当的方法,但控制器的工作是决定用户何时应该输入信息,以及视图何时应该显示内容。

在实现严格的MVC或MVC实时架构模式时可以使用的工作流是:

  • 视图查询控制器
  • 控制器要求模型进行一些处理
  • 控制器通知视图

由于视图知道控制器,但事实并非如此,我使用主题/观察者模式来实现从控制器到视图的通信。

因此:

class View 
{
void doSomething()
{
controller.requestDoSomething();
}
void onProcessingSuccessEvent()
{
// do stuff (for example read model)
}
};
class Controller
{
void requestDoSomething()
{
model.process();
...
notify(ProcessingSuccessEvent);
}
}

我希望这能帮助你解决你的问题。

谨致问候,