Я пишу приложение, которое прослушивает сетевое соединение, и когда поступают некоторые данные, он отвечает обратно, и в зависимости от входящих данных может потребоваться попросить пользователя (показать диалог) перед ответом назад.Как получить пользовательский ввод из середины метода модели в архитектуре Model-View-Viewmodel?
Я не знаю, как это сделать в архитектуре MV-VM: события и привязка к наблюдаемым коллекциям хороши, если мне нужно просто обновить графический интерфейс на основе входящих данных, но что, если мне действительно нужен anwer от пользователя перед ответом назад?
И чтобы все ухудшилось, я хочу сделать это синхронно, потому что я хочу, чтобы мой алгоритм ответа находился в одном месте, а не разбивался на несколько обратных вызовов с неясными обязанностями «кто-звонит-кто».
Просто, что-то вроде
HandleMessage(Message msg){
string reply;
if (msg.type == 1) {
reply = ...
} else {
string question = msg...
reply = ShowModalDialog(question); // MVVM violation!
}
sender.Send(reply);
}
, но я не хочу называть представление или ViewModel от модели, так как модель должна быть многоразовые и проверяемым - Я не хочу появляться диалоги в каждом тестовом прогоне, и это было бы нарушением MVVM! Нет событий (они только в одном направлении, насколько я знаю, и не имеют обратного канала для получения ответа на происхождение события) или привязки данных, поскольку это будет асинхронно.
Является ли это выполнимым? Это вопрос, который я задал нескольким тестируемым разработчикам, и до сих пор я не получил практически полезного ответа. Тем не менее, потребность в некотором дополнительном входе в середине обработки довольно распространена.
Спасибо!
EDIT: это прикладная логика, поэтому она явно принадлежит модели, и даже если в этом случае это не так, я хотел бы знать решение для случаев, когда мне действительно нужен вход пользователя в середине бизнеса логическая процедура в модели.
+1 для объяснения этого намного лучше, чем я. –
Спасибо, это звучит как чистое решение, я прочитаю ссылки (спасибо за них!) –