Redux
Eintrag zuletzt aktualisiert am: 27.03.2021
Das Flux-Pattern ist eine Variante des Observer-Pattern, die in von der Firma Facebook im Jahr 2014 veröffentlicht wurde. Redux ist eine modifizierte Implementierung von Flux, die 2015 erschienen ist (vgl. [
https://redux.js.org/understanding/history-and-design/prior-art]).
Redux verwendet "Pure Funktionen" (Pure Functions) im sogenannten "Reducer", die einen Zustand nicht modifizieren, sondern einen neuen Zustand erzeugen (
Immutable Objects).
Praxisbeispiel: Immutable Objects mit Record-Typen (ab C# 9.0) beim Redux-Pattern
Ohne Record-Typen sieht die Implementierung eines Zustands für einen einfachen Zähler und eines Reducers zum Ändern des Zählers in C# so aus:
public class CounterState
{
public int ClickCount { get; }
public CounterState(int clickCount)
{
ClickCount = clickCount;
}
}
public static class Reducers
{
[ReducerMethod]
public static CounterState ReduceIncrementCounterAction(CounterState state, IncrementCounterAction action) =>
new CounterState(state.ClickCount + 1);
[ReducerMethod]
public static CounterState ReduceDecrementCounterAction(CounterState state, IncrementCounterAction action) =>
new CounterState(state.ClickCount - 1);
}
Mit Record-Typen ist dies wesentlich prägnanter implementierbar:
public record CounterState(int ClickCount);
public static class Reducers1
{
[ReducerMethod]
public static CounterState ReduceIncrementCounterAction(CounterState state, IncrementCounterAction action) =>
state with { ClickCount = state.ClickCount + 1 };
[ReducerMethod]
public static CounterState ReduceDecrementCounterAction(CounterState state, DecrementCounterAction action) =>
state with { ClickCount = state.ClickCount - 1 };
}
Weitere Teile des Redux-Patterns (Feature, Actions) sind hier nicht wiedergegeben, da sie sich durch den Einsatz von Record-Typen nicht ändern. Siehe dazu die Bibliothek Fluxor, die Redux für
.NET realisiert:
https://github.com/mrpmorris/Fluxor