MVC:命令行应用程序的实现问题
MVC: troubles of realization in command line application
我正在写一个小型纸牌游戏,我被卡住了。只是一些基本的: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);
}
}
我希望这能帮助你解决你的问题。
谨致问候,
相关文章:
- 这个极客对极客的trie实现是否存在内存泄漏问题
- 在用于格式4的arm模拟器中实现功能时的一个问题
- C++头文件和类实现出现问题
- 基于 SFINAE 的特征实现问题与函数模板重载
- 线程池 C++ 实现问题
- 从输入创建最大可能的数字 - 使用 cout 实现问题
- C SSCANF实现问题(从文件中读取)
- MVC:命令行应用程序的实现问题
- 线程包装器实现问题
- LRU 缓存C++实现问题
- mkl 库 DCT 函数实现问题
- 递归方程实现问题
- 工厂类实现问题
- 迭代器实现问题
- 自定义STL列表实现问题
- 最小的c++ STL矢量实现问题
- 使用窗口函数的FIR滤波:实现问题
- GridWalk CodeEval实现问题
- 单例实现问题
- c++决策树实现问题:用代码思考