我正在编写一个侦听网络连接的应用程序,当一些数据到达时,它会回复,并且根据传入的数据,它可能需要在回复之前询问用户(显示对话框)。
我不知道如何在 MV-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!没有事件(据我所知,它们只是单向的,并且没有反向通道来获取对事件来源的回复)或数据绑定,因为它是异步的。
这是可行的吗?这是我问了几个测试驱动开发传播者的问题,到目前为止,我还没有得到实际可用的答案。然而,在处理过程中需要一些额外的输入是相当普遍的。
谢谢!
编辑:这是应用程序逻辑,所以它显然属于模型,即使在这种情况下它不属于,我想知道在模型中的业务逻辑例程中间确实需要用户输入的情况下的解决方案.