Je développe une structure de données complexe dans Clojure avec plusieurs sous-structures. Je sais que je vais vouloir étendre cette structure au fil du temps, et peut parfois vouloir changer la structure interne sans casser les différents utilisateurs de la structure de données (par exemple je peux vouloir changer un vecteur dans un hashmap, ajouter une sorte de structure d'indexation pour des raisons de performance, ou intégrer un type Java)Résumé des détails de mise en œuvre de la structure de données dans Clojure
Ma pensée actuelle est:
- Définir un protocole pour la structure globale avec différentes méthodes accesseurs
- Créer une mini-bibliothèque de fonctions qui naviguent dans la structure de données e .g. (Param1 param2 requête sous-structure-abc)
- Mettre en œuvre la structure de données à l'aide defrecord ou DEFTYPE, avec les méthodes de protocole définies pour utiliser la mini-bibliothèque
Je pense que cela va fonctionner, mais je suis inquiet qu'il commence à ressembler plutôt à beaucoup de code "colle". Aussi, cela reflète probablement aussi ma plus grande familiarité avec les approches orientées objet.
Quelle est la méthode recommandée pour faire cela dans Clojure?
Merci Michal! Insightful comme jamais :-) va certainement regarder dans les options ILookup et Associative – mikera
Ceci est une réponse très utile! Mais près de trois ans plus tard, il serait bon de mettre à jour ceci (ou de créer une nouvelle réponse) en fonction de la fonctionnalité disponible en 1.5. Une chose que j'ai remarquée est que 'defrecord' émet maintenant des fonctions d'usine, pas sûr que d'autres changements pourraient affecter cette réponse. –
Je pense que cette réponse pourrait aussi utiliser une mise à jour - même le livre O'Reily Clojure dit maintenant que le defrecord de clojure crée des fonctions d'usine. – djhaskin987