Я разрабатываю сложную структуру данных в Clojure с несколькими подструктурами.
Я знаю, что мне захочется расширить эту структуру с течением времени и иногда может менять внутреннюю структуру, не разбивая разных пользователей структуры данных (например, я могу изменить вектор в хэш-карту, добавить некоторые вид структуры индексации по соображениям производительности или включить Java-тип)
Мое современное мышление:
- Определить протокол для общей структуры с различными способами доступа.
- Создайте мини-библиотеку функций, которые перемещаются по структуре данных, например. (query-substructure-abc param1 param2)
- Реализовать структуру данных, используя defrecord или deftype, с помощью методов протокола, определенных для использования мини-библиотеки
Я думаю, что это сработает, хотя я беспокоюсь, что он начинает выглядеть довольно много "клея". Также это, вероятно, также отражает мое более широкое знакомство с объектно-ориентированными подходами.
Каков рекомендуемый способ сделать это в Clojure?