命令设计模式和用户交互

时间:2014-07-05 18:54:14

标签: c++ ios windows design-patterns command-pattern

我正在实现命令设计模式但我的命令需要询问用户文件名。我不确定命令怎么能要求它?

这帮四本书似乎触及了这个问题,但我不太清楚。下面是我的代码(伪代码是正确的并且是在飞行中写的。)

class OpenDocumentCommand : public Command
{
    virtual char * AskUserForFileName();
    virtual void Execute();

    Application _App;
}

void OpenDocumentCommand::Execute()
{
   char * fileName = AskUserForFileName();

   _App.OpenDocument( fileName );
}

现在在典型的简单示例中,AskUserForFileName()可以是cincout但是如何在正确的Windows应用程序中请求文件名?它应该打开文件资源管理器,用户可以选择文件名吗?

这是否意味着它必须与窗户紧密结合?我的计划是在Windows和iOS上使用这个代码,所以我想要一个解耦的解决方案。

1 个答案:

答案 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   }