He comenzado a aprender sobre Redux y React en el mundo web, y cuanto más aprendo sobre él, más me doy cuenta de lo dolorosa que es la administración de estado en el mundo de los escritorios con la arquitectura de estilo MVVM de WPF (usando Caliburn específicamente para vincular Vistas a ViewModels).
Redux tiene algunos principios simples que dictan cómo se debe administrar el estado, haciendo que las actualizaciones de la interfaz de usuario, el manejo de eventos y los cambios de estado sean mucho más predecibles. Los principios son:
- Una única fuente de verdad (todo el estado mutable se almacena en un único objeto compartido).
- El estado es de solo lectura. Los componentes no pueden modificarlo en todo el código, que normalmente es lo que sucede en WPF.
- El estado solo puede ser modificado por funciones puras.
La arquitectura MVVM de WPF le permite crear vistas interactivas muy rápidamente, pero los problemas de depuración cuando varios modelos de vista y eventos cambian de estado es una pesadilla. Por ejemplo: se activó un evento que cambió una vista e intentó establecer una pestaña predeterminada, pero los datos no terminaron de cargarse de forma asíncrona desde un servicio web, por lo que la pestaña no existe (todavía), por lo que no sucede nada
He pasado horas dibujando diagramas para tratar de comprender interacciones complejas entre componentes viewModels interrelacionados que se actualizan entre sí.
Entiendo que Redux tiene como objetivo resolver parte de esta imprevisibilidad del estado. ¿Hay algo similar o un patrón arquitectónico que encajaría bien con WPF para ayudar a administrar mejor el estado? No estoy seguro de qué tan bien funcionarían los principios de Redux en .NET ya que aún no los he probado. ¿Quizás alguien tiene alguna experiencia que pueda dar algún consejo?