IMHO, Lập trình phản ứng chức năng (FRP) theo nghĩa là một cách chung để giải quyết tình trạng vô hiệu bộ nhớ cache.
Đây là lý do tại sao: dữ liệu cũ trong thuật ngữ FRP được gọi là trục trặc . Một trong những mục tiêu của FRP là đảm bảo không có trục trặc.
FRP được giải thích chi tiết hơn trong bài nói chuyện 'Bản chất của FRP' và trong câu trả lời SO này .
Trong bài nói chuyện, các Cell
s đại diện cho một Đối tượng / Thực thể được lưu trong bộ nhớ cache và a Cell
được làm mới nếu một trong các phần phụ thuộc của nó được làm mới.
FRP ẩn mã hệ thống ống nước được liên kết với biểu đồ phụ thuộc và đảm bảo rằng không có lỗi cũ Cell
.
Một cách khác (khác với FRP) mà tôi có thể nghĩ đến là gói giá trị được tính toán (kiểu b
) vào một số loại văn bản Monad Writer (Set (uuid)) b
trong đó Set (uuid)
(ký hiệu Haskell) chứa tất cả các mã nhận dạng của các giá trị có thể thay đổi mà giá trị được tính b
phụ thuộc vào đó. Vì vậy, uuid
là một số loại mã định danh duy nhất xác định giá trị / biến có thể thay đổi (ví dụ một hàng trong cơ sở dữ liệu) mà giá trị được tính b
phụ thuộc vào đó.
Kết hợp ý tưởng này với các tổ hợp hoạt động trên loại nhà văn Monad này và điều đó có thể dẫn đến một số loại giải pháp vô hiệu hóa bộ nhớ cache chung nếu bạn chỉ sử dụng các tổ hợp này để tính toán mới b
. Các tổ hợp như vậy (ví dụ như một phiên bản đặc biệt của filter
) lấy đơn nguyên và (uuid, a)
-s của Writer làm đầu vào, trong đó a
là một dữ liệu / biến có thể thay đổi, được xác định bởi uuid
.
Vì vậy, mỗi khi bạn thay đổi dữ liệu "gốc" (uuid, a)
(giả sử dữ liệu chuẩn hóa trong cơ sở dữ liệu b
được tính toán từ đó ) mà giá trị được tính toán của loại b
phụ thuộc vào thì bạn có thể làm mất hiệu lực bộ đệm ẩn chứa b
nếu bạn thay đổi bất kỳ giá trị nào a
mà b
giá trị được tính phụ thuộc vào , bởi vì dựa vào Set (uuid)
Writer Monad, bạn có thể biết khi nào điều này xảy ra.
Vì vậy, bất cứ khi nào bạn thay đổi điều gì đó với một giá trị nhất định uuid
, bạn sẽ phát đột biến này tới tất cả các bộ nhớ cache và chúng làm mất hiệu lực các giá trị b
phụ thuộc vào giá trị có thể thay đổi được xác định với đã nói uuid
bởi vì đơn nguyên Writer trong đó đơn nguyên b
được bao bọc có thể cho biết điều đó có b
phụ thuộc vào đã nói uuid
hoặc không phải.
Tất nhiên, điều này chỉ có lợi nếu bạn đọc thường xuyên hơn nhiều so với viết.
Cách tiếp cận thứ ba, thực tế, là sử dụng các khung nhìn cụ thể hóa trong cơ sở dữ liệu và sử dụng chúng như các khung nhìn bộ nhớ cache. AFAIK họ cũng nhằm giải quyết vấn đề vô hiệu. Tất nhiên, điều này giới hạn các hoạt động kết nối dữ liệu có thể thay đổi với dữ liệu dẫn xuất.