IMHO, Functional Reactive Programming (FRP) ist in gewissem Sinne eine allgemeine Methode zur Lösung der Cache-Ungültigkeit.
Hier ist der Grund: Veraltete Daten in der FRP-Terminologie werden als Panne bezeichnet . Eines der Ziele von FRP ist es, das Fehlen von Störungen zu gewährleisten.
FRP wird in diesem 'Essence of FRP'-Vortrag und in dieser SO-Antwort ausführlicher erläutert .
Im Vortrag stellen die Cells ein zwischengespeichertes Objekt / eine zwischengespeicherte Entität dar und a Cellwird aktualisiert, wenn eine ihrer Abhängigkeiten aktualisiert wird.
FRP verbirgt den mit dem Abhängigkeitsdiagramm verknüpften Installationscode und stellt sicher, dass keine veralteten Cells vorhanden sind.
Eine andere Möglichkeit (anders als FRP), die ich mir vorstellen kann, besteht darin, den berechneten Wert (vom Typ b) in eine Art Schreibmonade zu verpacken, Writer (Set (uuid)) bin der Set (uuid)(Haskell-Notation) alle Bezeichner der veränderlichen Werte enthält, von denen der berechnete Wert babhängt. Es handelt sich also uuidum eine Art eindeutigen Bezeichner, der den veränderlichen Wert / die veränderbare Variable (z. B. eine Zeile in einer Datenbank) identifiziert, von der der berechnete Wert babhängt.
Kombinieren Sie diese Idee mit Kombinatoren, die mit dieser Art von Writer-Monade arbeiten und die zu einer allgemeinen Lösung für die Ungültigmachung des Caches führen können, wenn Sie diese Kombinatoren nur zur Berechnung einer neuen verwenden b. Solche Kombinatoren (z. B. eine spezielle Version von filter) verwenden Writer-Monaden und (uuid, a)-s als Eingaben, wobei aes sich um veränderbare Daten / Variablen handelt, die durch gekennzeichnet sind uuid.
Jedes Mal, wenn Sie die "ursprünglichen" Daten (uuid, a)(z. B. die normalisierten Daten in einer Datenbank, aus der bberechnet wurde) ändern, von denen der berechnete Wert vom Typ babhängt, können Sie den enthaltenen Cache ungültig machen, bwenn Sie einen Wert mutieren, avon dem der berechnete bWert abhängt , weil anhand der Set (uuid)in der Writer-Monade können Sie erkennen, wann dies geschieht.
Jedes Mal, wenn Sie etwas mit einem bestimmten Wert mutieren uuid, senden Sie diese Mutation an alle Cache-s, und sie machen die Werte ungültig, die bvon dem mit dem genannten veränderlichen Wert abhängen, uuidda die Writer-Monade, in die der Wert eingeschlossen ist, erkennen bkann, ob dies bvom uuidoder abhängt nicht.
Das zahlt sich natürlich nur aus, wenn Sie viel öfter lesen als schreiben.
Ein dritter praktischer Ansatz besteht darin, materialisierte Ansichten in Datenbanken zu verwenden und sie als Cache zu verwenden. AFAIK zielen sie auch darauf ab, das Invalidierungsproblem zu lösen. Dies begrenzt natürlich die Operationen, die die veränderlichen Daten mit den abgeleiteten Daten verbinden.