Je voudrais commencer à jouer avec ClojureScript, mais je suis perplexe sur certains points. Mon problème est ce qui est une bonne façon de gérer les changements d'état provenant de l'interaction avec l'utilisateur, lorsque vous essayez de travailler de manière fonctionnelle.
Permettez-moi de donner quelques exemples. Je pense aux applications qui s'exécutent dans le navigateur, mais je pense que le problème est plus général. Bien sûr, quelque chose va changer - le DOM au moins. Mais je voudrais savoir comment organiser le reste du code pour travailler avec des structures de données immuables.
1) Disons que je veux attacher certains événements à un objet DOM. Ce n'est pas difficile à faire d'une manière principalement fonctionnelle: lorsque vous créez le nœud, vous lui associez une carte de hachage avec les différents gestionnaires d'événements. Mais considérez le cas où vous utilisez la délégation d'événements. Ensuite, lorsque vous créez un nouveau nœud, vous pouvez attacher un gestionnaire d'événements à un nœud parent qui existe probablement déjà. Vous devrez donc modifier le hachage associé au nœud déjà existant.
2) Supposons que je conçois un module de saisie semi-automatique pour un champ de saisie. Chaque fois que l'utilisateur appuie sur une touche, je peux appeler un serveur pour obtenir les suggestions. C'est facile. Mais supposons maintenant que je veuille l'optimiser un peu. Si je connais tous les résultats correspondants, foo
il est inutile de demander à nouveau tous les résultats correspondants foobar
; Je peux simplement filtrer le premier. J'ai donc besoin de créer une sorte de cache. Ce cache sera mis à jour à chaque fois que l'utilisateur insère un nouveau mot qui n'est pas un sur-ensemble des mots précédemment saisis. Encore une fois: comment modéliser le cache? La manière la plus raisonnable semble être une carte de hachage mappant les mots aux résultats, mais elle devrait être modifiable.
Pouvez-vous suggérer des modèles qui faciliteraient l'intégration des changements dus à l'interaction de l'utilisateur dans une conception fonctionnelle?