Ho iniziato a conoscere Redux e React nel mondo del web, e più ne imparo più mi sto rendendo conto di quanto sia dolorosa la gestione dello stato nel mondo desktop con l'architettura in stile MVVM di WPF (usando Caliburn specificamente associare le viste a ViewModels).
Redux ha alcuni semplici principi che stabiliscono come deve essere gestito lo stato, rendendo più prevedibili gli aggiornamenti dell'interfaccia utente, la gestione degli eventi e le modifiche dello stato. I principi sono:
- Una singola fonte di verità (tutti gli stati mutabili sono memorizzati in un singolo oggetto condiviso).
- Lo stato è di sola lettura. Non può essere modificato dai componenti attraverso il codice, che è in genere ciò che accade in WPF.
- Lo stato può essere modificato solo da pure funzioni.
L'architettura MVVM di WPF consente di creare viste interattive molto rapidamente, ma il debug dei problemi quando vari viewmodels ed eventi cambiano stato è un incubo. Ad esempio: un evento licenziato che ha modificato una vista e ha provato a impostare una scheda predefinita, ma i dati non hanno completato il caricamento in modo asincrono da un servizio Web, quindi la scheda non esiste (ancora) quindi non accade nulla
Ho impiegato ore a disegnare diagrammi per cercare di comprendere interazioni complesse tra componenti viewModels correlati tra loro che si aggiornano l'un l'altro.
Comprendo che Redux mira a risolvere parte di questo stato di imprevedibilità. C'è qualcosa di simile, o un modello architettonico che si adatterebbe bene con WPF per aiutare a gestire meglio lo stato? Non sono sicuro di quanto bene funzionino i principi di Redux in .NET perché non li ho ancora provati. Forse qualcuno ha qualche esperienza che può dare qualche consiglio?