C++ MVC:命令行应用中实现的难点

C++ MVC:命令行应用中实现的难点,c++,model-view-controller,architecture,C++,Model View Controller,Architecture,我正在写一个小纸牌游戏,我被卡住了。 只是一些基本的: 1) 视图观察模型 2) 控制器决定何时显示输出窗口和何时显示输入窗口 3) 模型做所有的数学运算 嗯,看起来我的控制器必须是模型的观察者,这很糟糕,据我所知,也是错误的 我的情况是:有时用户必须做出选择并通过命令行进行确认 char View::getPlayersChoice { while ( cin>>choice ) { if ( choice == 'y' || choice == 'n' ) con

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

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

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

char View::getPlayersChoice
{
while ( cin>>choice )
{
   if ( choice == 'y' || choice == 'n' )
     controller.getPlayersChoice( choice )
   else
     cout<<"Invalid input. Please try again."
}
}
char视图::GetPlayerChoice
{
而(cin>>选择)
{
如果(选项='y'| |选项=='n')
controller.getPlayerChoice(选项)
其他的

cout在实现严格的MVC或MVC live Architectural模式时可以使用的工作流程是:

  • 该视图查询控制器
  • 控制器要求模型进行一些处理
  • 控制器通知视图
由于视图知道控制器,但事实并非如此,因此我使用subject/observer模式实现从控制器到视图的通信

因此,你有:

class View 
{
  void doSomething()
  {
    controller.requestDoSomething();
  }

  void onProcessingSuccessEvent()
  {
    // do stuff (for example read model)
  }
};

class Controller
{
  void requestDoSomething()
  {
    model.process();
    ...
    notify(ProcessingSuccessEvent);
  }
}
我希望这能帮助你解决你的问题


致以最良好的祝愿,

如果(选择=='y'| |'n')
没有做你认为它会做的事情!哇,谢谢你指出这一点,我会更新我的帖子。