Estoy escribiendo una aplicación que escucha en una conexión de red, y cuando llegan algunos datos, responde de nuevo, y dependiendo de los datos entrantes, es posible que tenga que preguntar al usuario (mostrar el cuadro de diálogo) antes de responder de nuevo.¿Cómo obtener la entrada del usuario limpiamente desde la mitad del método del modelo en la arquitectura Model-View-Viewmodel?
No sé cómo hacer esto limpiamente en la arquitectura MV-VM: los eventos y el enlace a las colecciones observables son agradables si solo necesito actualizar la GUI en base a los datos entrantes, pero ¿qué sucede si realmente necesito una respuesta? usuario antes de responder de nuevo?
Y para empeorar las cosas, quiero hacerlo de forma síncrona, porque quiero que mi algoritmo de respuesta esté en un lugar, no particionado en múltiples devoluciones de llamada con responsabilidades inciertas de 'quién llama'.
Simplemente, algo así como
HandleMessage(Message msg){
string reply;
if (msg.type == 1) {
reply = ...
} else {
string question = msg...
reply = ShowModalDialog(question); // MVVM violation!
}
sender.Send(reply);
}
pero no quiero llamar a la vista o el modelo de vista del modelo, ya que el modelo tiene que ser reutilizable y comprobable - No quiero hacer estallar los cuadros de diálogo en cada prueba, ¡y sería una violación de MVVM! No hay eventos (son, por lo que sé, de un solo sentido, y no tienen un canal hacia atrás para obtener respuesta al origen del evento) o enlaces de datos, ya que serían asíncronos.
¿Es esto factible? Esta es una pregunta que hice a varios propagadores de desarrollo impulsados por pruebas, y hasta ahora, no obtuve una respuesta práctica. Sin embargo, la necesidad de una entrada adicional en el medio del procesamiento es bastante común.
Gracias!
EDITAR: esta es la lógica de la aplicación, por lo que claramente pertenece al modelo, y aunque en este caso no fue así, me gustaría saber la solución para los casos cuando realmente necesito la opinión del usuario en el medio de la empresa rutina lógica en el modelo.
+1 por explicarlo mucho mejor que yo. –
Gracias, esto suena como una solución limpia, leeré los enlaces (¡gracias por ellos!) –