IMHO, Pemrograman Reaktif Fungsional (FRP) dalam arti tertentu adalah cara umum untuk mengatasi pembatalan cache.
Inilah alasannya: data basi dalam terminologi FRP disebut glitch . Salah satu tujuan FRP adalah untuk menjamin tidak adanya gangguan.
FRP dijelaskan lebih rinci dalam pembicaraan 'Esensi FRP' ini dan dalam jawaban SO ini .
Dalam pembicaraan itu Cells mewakili Objek / Entitas yang di-cache dan di- Cellrefresh jika salah satu dependensinya di-refresh.
FRP menyembunyikan kode pipa yang terkait dengan grafik ketergantungan dan memastikan bahwa tidak ada yang basi Cell.
Cara lain (berbeda dari FRP) yang dapat saya pikirkan adalah membungkus nilai yang dihitung (tipe b) menjadi semacam penulis Monad di Writer (Set (uuid)) bmana Set (uuid)(notasi Haskell) berisi semua pengidentifikasi dari nilai-nilai yang dapat berubah di mana nilai yang dihitung bbergantung. Jadi, uuidadalah semacam pengenal unik yang mengidentifikasi nilai / variabel yang bisa berubah (katakanlah baris dalam database) tempat bbergantung yang dihitung .
Gabungkan ide ini dengan kombinator yang beroperasi pada jenis penulis Monad ini dan itu mungkin mengarah pada semacam solusi pembatalan cache umum jika Anda hanya menggunakan kombinator ini untuk menghitung yang baru b. Kombinator seperti itu (katakanlah versi khusus dari filter) mengambil monad dan (uuid, a)-s Writer sebagai input, di mana adata / variabel yang bisa berubah, diidentifikasi oleh uuid.
Jadi, setiap kali Anda mengubah data "asli" (uuid, a)(misalnya data yang dinormalisasi dalam database yang bdihitung) yang menjadi dasar penghitungan nilai jenis, bAnda dapat membatalkan cache yang berisi bjika Anda mengubah nilai apa pun ayang menjadi tempat bbergantung nilai yang dihitung. , karena berdasarkan pada Set (uuid)Penulis Monad Anda dapat mengetahui kapan hal ini terjadi.
Jadi setiap kali Anda memutasi sesuatu dengan yang diberikan uuid, Anda menyiarkan mutasi ini ke semua cache dan mereka membatalkan nilai byang bergantung pada nilai yang bisa berubah yang diidentifikasi dengan kata uuidkarena monad Writer di mana yang bdibungkus dapat mengetahui apakah itu btergantung pada kata uuidatau tidak.
Tentu saja, ini hanya bermanfaat jika Anda membaca lebih sering daripada menulis.
Pendekatan ketiga, praktis, adalah dengan menggunakan tampilan terwujud dalam database dan menggunakannya sebagai cache. AFAIK mereka juga bertujuan untuk menyelesaikan masalah pembatalan. Ini tentu saja membatasi operasi yang menghubungkan data yang bisa berubah ke data yang diturunkan.