Ich arbeite an einem Spiel. Ursprünglich war der Benutzer in einem einzigen Kerker, mit den Eigenschaften:Benutzer sehen einen Teil des tief verschachtelten Status, sollten sichtbare Eigenschaften auf oberster Ebene sein?
// state
{
health: 95,
creatures: [ {}, {} ],
bigBoss: {},
lightIsOn: true,
goldReward: 54,
// .. you get the idea
}
Nun gibt es viele Reiche und viele Dungeons, und wir können diese Daten asynchron abrufen möchten.
Ist es besser, diese tief verschachtelte Struktur im Benutzerzustand darzustellen, alle anderen möglichen Dungeons effektiv zu speichern, wenn sie geladen werden, und jedes Mal, wenn wir eine Eigenschaft aktualisieren wollen (zB Aktion TURN_ON_LIGHT
), müssen wir genau finden Von welchen Dungeons reden wir oder aktualisieren die Top-Level-Eigenschaften jedes Mal, wenn wir in einen neuen Dungeon ziehen?
Der folgende Status zeigt die Verschachtelung. Die meisten der Informationen sind irrelevant für meine Präsentations-Objekte und Aktionen, sie kümmern sie nur um einen Kerker des Benutzer gerade befindet.
// state with nesting
{
health: 95,
kingdom: 0,
dungeon: 1,
kingdoms: [
{
dungeons: [
{
creatures: [ {}, {} ],
bigBoss: {},
lightIsOn: true,
goldReward: 54
}
{
creatures: [ {}, {}, {} ],
bigBoss: {},
lightIsOn: false,
goldReward: 79
}
{
//...
}
]
}
{
// ...
}
]
}
Eines der Dinge, die mich halten ist alles wieder ist, dass die saubere Reduzierung, die vorher könnte nur eine Aktion wie TURN_ON_LIGHT
und aktualisieren Sie die Top-Level-Eigenschaft lightIsOn
, so dass sehr geradlinige Reducer Zusammensetzung, jetzt in den Staat zu erreichen und aktualisieren Sie die richtige Eigenschaft abhängig von der kingdom
und dungeon
, die wir derzeit sind gibt es eine schöne Art, die Reduzierungen zu komponieren, die das sauber halten?
Auch ohne Verschachtelung bleibt meine Frage, nur ein bisschen anders: Sollte ich all diese anderen "Königreiche" und "Dungeons" in meinem Code haben, wenn die Präsentationskomponenten sich nicht um sie kümmern und wenn die Eigenschaften sind identisch zwischen jedem von ihnen, und wie kann ich meine Reduzierungen komponieren, so dass ich eine Eigenschaft eines einzelnen Dungeons sauber aktualisieren kann? Kann ich meinen aktuellen Dungeon als Pseudo-Root-Status aller dungeonspezifischen Reduzierungen weitergeben? –
Nicht sicher, was Sie meinen, indem Sie "in meinem Code haben". Habe meine Antwort mit weiteren Informationen und Vorschlägen aktualisiert. – markerikson
"Sie in meinem Code zu haben" sollte "sie in meinem Zustand haben". Egal, ich kann damit arbeiten. Vielen Dank. –