ClojureScript ile uğraşmaya başlamak istiyorum, ancak bazı noktalar hakkında şaşkınım. Benim sorunum, işlevsel olarak çalışmaya çalışırken, kullanıcı etkileşiminden gelen durum değişiklikleriyle başa çıkmanın iyi bir yolu.
Birkaç örnek vereyim. Tarayıcıda çalışan uygulamaları göz önünde bulunduruyorum, ancak sorunun daha genel olduğunu düşünüyorum. Tabii ki bir şeyler değişecek - en azından DOM. Ama değişmez veri yapılarıyla çalışmak için kodun geri kalanını nasıl organize edeceğimizi öğrenmek istiyorum.
1) Diyelim ki bazı DOM nesnelerine bazı olaylar eklemek istiyorum. Bunu çoğunlukla işlevsel bir şekilde yapmak zor değildir: Düğümü oluşturduğunuzda, çeşitli olay işleyicileri ile bir karma haritası eklersiniz. Ancak olay yetkisi kullandığınız durumu düşünün. Sonra yeni bir düğüm oluşturduğunuzda, büyük olasılıkla zaten varolan bir üst düğüme bir olay işleyicisi ekleyebilirsiniz. Bu nedenle, zaten var olan düğümle ilişkili karmayı değiştirmeniz gerekir.
2) Bir giriş alanı için otomatik tamamlama modülü tasarladığımı varsayalım. Kullanıcı bir tuşa her bastığında, önerileri almak için sunucuyu arayabilirim. Bu kolay. Ama şimdi biraz optimize etmek istediğimi varsayalım. Eşleşen tüm sonuçları biliyorsam foo
, eşleşen tüm sonuçlar için tekrar sormanın bir anlamı yoktur foobar
; İlkine filtre uygulayabilirim. Bu yüzden bir çeşit önbellek oluşturmam gerekiyor. Bu önbellek, kullanıcı daha önce girilen kelimelerin üst kümesi olmayan yeni bir sözcük eklediğinde güncellenir. Tekrar: önbelleği nasıl modelleyebilirim? En makul yol, kelimeleri sonuçlarla eşleyen karma bir harita gibi görünmektedir, ancak değişebilir olmalıdır.
Kullanıcı etkileşimi nedeniyle değişiklikleri işlevsel bir tasarıma dahil etmeyi kolaylaştıracak bazı modeller önerebilir misiniz?