我正在实现命令设计模式但我的命令需要询问用户文件名。我不确定命令怎么能要求它?
这帮四本书似乎触及了这个问题,但我不太清楚。下面是我的代码(伪代码是正确的并且是在飞行中写的。)
class OpenDocumentCommand : public Command
{
virtual char * AskUserForFileName();
virtual void Execute();
Application _App;
}
void OpenDocumentCommand::Execute()
{
char * fileName = AskUserForFileName();
_App.OpenDocument( fileName );
}
现在在典型的简单示例中,AskUserForFileName()
可以是cin
和cout
但是如何在正确的Windows应用程序中请求文件名?它应该打开文件资源管理器,用户可以选择文件名吗?
这是否意味着它必须与窗户紧密结合?我的计划是在Windows和iOS上使用这个代码,所以我想要一个解耦的解决方案。
答案 0 :(得分:0)
要最小化命令和窗口之间的耦合,您至少应在它们之间插入一个抽象层。在许多MVVM实现中,您可以找到一个“模态对话框” - 接口,它隐藏了调用ViewModel窗口的实现细节。
此接口至少包含一个方法“ShowDialog()”,但它也可以将ViewModel作为参数并返回一个回调,以在用户关闭时通知调用者。
以下是一个例子:
public interface IModalWindow
2 {
3 bool? DialogResult { get; set; }
4 event EventHandler Closed;
5 void Show();
6 object DataContext { get; set; }
7 void Close();
8 }