Tôi muốn bắt đầu nghịch ngợm với ClojureScript, nhưng tôi bối rối về một số điểm. Vấn đề của tôi là cách tốt để đối phó với những thay đổi trạng thái đến từ sự tương tác của người dùng, khi bạn cố gắng làm việc theo chức năng.
Hãy để tôi đưa ra một vài ví dụ. Tôi có trong đầu các ứng dụng chạy trên trình duyệt, nhưng tôi nghĩ vấn đề này chung chung hơn. Tất nhiên một cái gì đó sẽ thay đổi - ít nhất là DOM. Nhưng tôi muốn tìm hiểu cách tổ chức phần còn lại của mã để làm việc với các cấu trúc dữ liệu bất biến.
1) Nói rằng tôi muốn đính kèm một số sự kiện vào một số đối tượng DOM. Điều này không khó thực hiện theo cách chủ yếu là chức năng: khi bạn tạo nút, bạn đính kèm bản đồ băm với các trình xử lý sự kiện khác nhau. Nhưng hãy xem xét trường hợp bạn đang sử dụng ủy quyền sự kiện. Sau đó, khi bạn tạo một nút mới, bạn có thể đính kèm một trình xử lý sự kiện vào một số nút cha có thể đã tồn tại. Vì vậy, bạn sẽ phải thay đổi hàm băm liên quan đến nút đã tồn tại.
2) Giả sử tôi đang thiết kế một mô-đun tự động hoàn thành cho trường đầu vào. Mỗi khi người dùng nhấn một phím, tôi có thể thực hiện cuộc gọi đến máy chủ để nhận các đề xuất. Điều này thật dễ dàng. Nhưng bây giờ giả sử tôi muốn tối ưu hóa nó một chút. Nếu tôi biết tất cả các kết quả khớp foo
, sẽ không có vấn đề gì khi hỏi lại tất cả các kết quả khớp foobar
; Tôi chỉ có thể lọc các cựu. Vì vậy, tôi cần phải xây dựng một số loại bộ đệm. Bộ đệm này sẽ được cập nhật mỗi khi người dùng chèn một từ mới không phải là siêu từ của các từ đã nhập trước đó. Một lần nữa: làm thế nào để tôi mô hình bộ đệm? Cách hợp lý nhất có vẻ là một từ ánh xạ băm ánh xạ đến kết quả, nhưng nó có thể thay đổi được.
Bạn có thể đề xuất một số mẫu giúp kết hợp các thay đổi dễ dàng hơn do tương tác của người dùng với thiết kế chức năng không?