Gostaria de começar a brincar com o ClojureScript, mas estou intrigado com alguns pontos. Meu problema é o que é uma boa maneira de lidar com alterações de estado provenientes da interação do usuário, quando você tenta trabalhar funcionalmente.
Deixe-me dar alguns exemplos. Penso em aplicativos que são executados no navegador, mas acho que o problema é mais geral. Claro que algo estará mudando - pelo menos o DOM. Mas eu gostaria de descobrir como organizar o restante do código para trabalhar com estruturas de dados imutáveis.
1) Digamos que desejo anexar alguns eventos a algum objeto DOM. Isso não é difícil de ser feito de uma maneira principalmente funcional: ao criar o nó, você anexa um mapa de hash aos vários manipuladores de eventos. Mas considere o caso em que você está usando a delegação de eventos. Quando você cria um novo nó, pode anexar um manipulador de eventos a algum nó pai que provavelmente já existe. Portanto, você teria que alterar o hash associado ao nó já existente.
2) Digamos que estou projetando um módulo de preenchimento automático para um campo de entrada. Sempre que o usuário pressiona uma tecla, posso fazer uma ligação para um servidor para obter as sugestões. Isso é facil. Mas agora suponha que eu queira otimizar um pouco. Se conheço todos os resultados correspondentes, foo
não há motivo para solicitar novamente todos os resultados correspondentes foobar
; Eu posso apenas filtrar o primeiro. Então, eu preciso construir algum tipo de cache. Esse cache será atualizado sempre que o usuário inserir uma nova palavra que não seja um superconjunto das palavras inseridas anteriormente. Novamente: como eu modelo o cache? A maneira mais razoável parece ser um mapa de hash que mapeie as palavras para os resultados, mas deve ser mutável.
Você pode sugerir alguns padrões que facilitariam a incorporação de alterações devido à interação do usuário em um design funcional?