我正在编写一个应用程序,它监听网络连接。当一些数据到达时,它会回复并根据接收到的数据,在回复之前可能需要向用户询问(显示对话框)。
在M-V-VM架构中,如果我需要根据接收到的数据更新GUI,那么事件和绑定到可观察集合是很好的选择,但如果我实际上需要用户的答案才能回复呢?
更糟糕的是,我想要同步完成这个操作,因为我希望我的回复算法只存在于一个地方,而不是分成多个回调函数,责任不明确。
简单来说,就像这样:
但我不想从模型中调用视图或视图模型,因为模型需要可重用和可测试性 - 我不希望在每个测试运行中弹出对话框,这将违反MVVM!没有事件(据我所知,它们只是单向的,并且没有回溯渠道来获取事件源的答复)或数据绑定,因为它会是异步的。
这可行吗?这是我问过几位测试驱动开发倡导者的问题,到目前为止,我还没有得到实际可用的答案。然而,在处理过程中需要一些额外的输入是相当常见的。
谢谢!
编辑:这是应用程序逻辑,因此它显然属于模型,即使在这种情况下不是,我也想知道当我真正需要用户在模型业务逻辑例程中间输入时的解决方案。
在M-V-VM架构中,如果我需要根据接收到的数据更新GUI,那么事件和绑定到可观察集合是很好的选择,但如果我实际上需要用户的答案才能回复呢?
更糟糕的是,我想要同步完成这个操作,因为我希望我的回复算法只存在于一个地方,而不是分成多个回调函数,责任不明确。
简单来说,就像这样:
HandleMessage(Message msg){
string reply;
if (msg.type == 1) {
reply = ...
} else {
string question = msg...
reply = ShowModalDialog(question); // MVVM violation!
}
sender.Send(reply);
}
但我不想从模型中调用视图或视图模型,因为模型需要可重用和可测试性 - 我不希望在每个测试运行中弹出对话框,这将违反MVVM!没有事件(据我所知,它们只是单向的,并且没有回溯渠道来获取事件源的答复)或数据绑定,因为它会是异步的。
这可行吗?这是我问过几位测试驱动开发倡导者的问题,到目前为止,我还没有得到实际可用的答案。然而,在处理过程中需要一些额外的输入是相当常见的。
谢谢!
编辑:这是应用程序逻辑,因此它显然属于模型,即使在这种情况下不是,我也想知道当我真正需要用户在模型业务逻辑例程中间输入时的解决方案。