Шаблон проектирования команд и взаимодействие с пользователем

Я реализую шаблон проектирования команд, но моя команда должна запросить у пользователя имя файла. Я не уверен, как команда может попросить об этом?

Банда из четырех книг, кажется, касается этой проблемы, но я не совсем уверен. Ниже мой код (псевдокод должен быть корректным и написанным на лету).

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

Решение

Чтобы свести к минимуму связь между вашей командой и окном, вы должны как минимум вставить между ними слой абстракции. Во многих реализациях MVVM вы можете найти «Modal Dialog» -интерфейс, который скрывает детали реализации окна от вызывающей 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   }
0

Другие решения