Estoy totalmente en desacuerdo con el concepto de que el Modelo no debe implementar el INotifyPropertyChanged
. ¡Esta interfaz no es específica de la interfaz de usuario! Simplemente informa de un cambio. De hecho, WPF usa mucho esto para identificar cambios, pero eso no significa que sea una interfaz de UI. Lo compararía con el siguiente comentario: " Un neumático es un accesorio para el automóvil ". Claro que sí, pero las bicicletas, los autobuses, etc. también lo usan. En resumen, no tome esa interfaz como una cosa de UI.
Dicho esto, no necesariamente significa que creo que el Modelo debería proporcionar notificaciones. De hecho, como regla general, el modelo no debe implementar esta interfaz, a menos que sea necesario. En la mayoría de los casos en los que no se envían datos del servidor a la aplicación cliente, el modelo puede quedar obsoleto. Pero si escucho los datos del mercado financiero, entonces no veo por qué el modelo no puede implementar la interfaz. Como ejemplo, ¿qué sucede si tengo una lógica que no es de UI, como un servicio que cuando recibe un precio de compra o venta por un valor determinado emite una alerta (por ejemplo, a través de un correo electrónico) o hace un pedido? Esta podría ser una posible solución limpia.
Sin embargo, hay diferentes formas de lograr las cosas, pero siempre argumentaría a favor de la simplicidad y evitaría la redundancia.
¿Qué es mejor? ¿Definir eventos en una colección o cambios de propiedad en el modelo de vista y propagarlo al modelo o hacer que la vista actualice intrínsecamente el modelo (a través del modelo de vista)?
El resultado final cada vez que ves a alguien que dice " no puedes hacer esto o aquello " es una señal de que no saben de qué están hablando.
Realmente depende de su caso y, de hecho, MVVM es un marco con muchos problemas y todavía no he visto una implementación común de MVVM en todos los ámbitos.
Desearía tener más tiempo para explicar los muchos sabores de MVVM y algunas soluciones a problemas comunes, en su mayoría proporcionados por otros desarrolladores, pero supongo que tendré que hacerlo en otro momento.