Comecei a aprender sobre o Redux e o React no mundo da web e, quanto mais aprendo sobre ele, mais percebo o quão doloroso o gerenciamento de estado é no mundo do desktop com a arquitetura no estilo MVVM do WPF (usando o Caliburn especificamente para vincular o Views para ViewModels).
O Redux possui alguns princípios simples que determinam como o estado deve ser gerenciado, tornando as atualizações da interface do usuário, a manipulação de eventos e as mudanças de estado muito mais previsíveis. Os princípios são:
- Uma única fonte de verdade (todo estado mutável é armazenado em um único objeto compartilhado).
- O estado é somente leitura. Ele não pode ser modificado pelos componentes em todo o código, o que normalmente ocorre no WPF.
- Estado só pode ser modificado por funções puras.
A arquitetura MVVM do WPF permite criar visualizações interativas muito rapidamente, mas problemas de depuração quando vários modelos e eventos de visualização mudam de estado são um pesadelo. Por exemplo: um evento disparado que mudou uma visualização e tentou definir uma guia padrão, mas os dados não terminaram de carregar assincronamente a partir de um serviço da Web, para que a guia ainda não exista, para que nada aconteça
Passei horas desenhando diagramas para tentar entender as interações complexas entre os componentes viewModels inter-relacionados que se atualizam.
Entendo que o Redux tem como objetivo resolver parte dessa imprevisibilidade do estado. Existe algo semelhante ou um padrão arquitetural que se encaixaria perfeitamente no WPF para ajudar a gerenciar melhor o estado? Não tenho certeza de como os princípios do Redux funcionariam no .NET, pois ainda não os tentei. Talvez alguém tenha alguma experiência que possa dar alguns conselhos?