Saya ingin mulai mengutak-atik ClojureScript, tetapi saya bingung tentang beberapa poin. Masalah saya adalah apa cara yang baik untuk menghadapi perubahan status yang berasal dari interaksi pengguna, ketika Anda mencoba untuk bekerja secara fungsional.
Biarkan saya memberi beberapa contoh. Saya ada dalam pikiran aplikasi yang berjalan di browser, tapi saya pikir masalahnya lebih umum. Tentu saja sesuatu akan berubah - setidaknya DOM. Tapi saya ingin mencari tahu bagaimana mengatur sisa kode untuk bekerja dengan struktur data yang tidak berubah.
1) Katakan saya ingin melampirkan beberapa acara ke beberapa objek DOM. Ini tidak sulit dilakukan dengan cara yang sebagian besar fungsional: ketika Anda membuat node, Anda melampirkannya peta hash dengan berbagai event handler. Tetapi pertimbangkan kasus di mana Anda menggunakan delegasi acara. Kemudian ketika Anda membuat simpul baru, Anda dapat melampirkan pengendali acara ke beberapa simpul induk yang mungkin sudah ada. Jadi, Anda harus mengubah hash yang terkait dengan simpul yang sudah ada.
2) Katakanlah saya sedang merancang modul autocomplete untuk bidang input. Setiap kali pengguna menekan tombol, saya bisa melakukan panggilan ke server untuk mendapatkan saran. Ini mudah. Tapi sekarang anggaplah saya ingin mengoptimalkannya sedikit. Jika saya tahu semua hasil yang cocok foo
tidak ada gunanya bertanya lagi untuk semua hasil yang cocok foobar
; Saya bisa menyaring yang pertama. Jadi saya perlu membuat semacam cache. Tembolok ini akan diperbarui setiap kali pengguna memasukkan kata baru yang bukan superset dari kata yang dimasukkan sebelumnya. Lagi: bagaimana cara memodelkan cache? Cara yang paling masuk akal tampaknya peta hash pemetaan kata-kata untuk hasil, tetapi harus bisa berubah.
Bisakah Anda menyarankan beberapa pola yang akan membuatnya lebih mudah untuk memasukkan perubahan karena interaksi pengguna ke dalam desain fungsional?