gpt4 book ai didi

c++ - MVC : troubles of realization in command line application

转载 作者:太空宇宙 更新时间:2023-11-04 13:54:31 25 4
gpt4 key购买 nike

我正在编写一个小型纸牌游戏,但遇到了困难。只是一些基本的:1) View 观察模型2) Controller 决定什么时候显示输出窗口,什么时候显示输入窗口3) 模型做所有的数学运算

好吧,看起来我的 Controller 必须是模型的观察者,这很糟糕,据我所知,也是错误的。

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

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

所以我的 Controller 必须以某种方式知道时机何时到来并调用 View 的函数 getPlayersChoice。我看到它的唯一方式是:1)模型需要一些用户输入2)模型告诉 Controller :“嘿,给我输入!”3) Controller 说“好的”并调用 view.getPlayersChoice4) Controller 给模型输入

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

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

最佳答案

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

  • View 查询 Controller
  • Controller 要求模型做一些处理
  • Controller 通知 View

因为 View 知道 Controller ,但反之则不然,我使用实现主题/观察者模式来从 Controller 到 View 进行通信。

因此你有:

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

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

class Controller
{
void requestDoSomething()
{
model.process();
...
notify(ProcessingSuccessEvent);
}
}

我希望这可以帮助您解决问题。

最好的问候,

关于c++ - MVC : troubles of realization in command line application,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22089110/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com