Я строю целое приложение из неизменяемых объектов, чтобы упростить реализацию многопоточности и отмены. Я использую Google Collections Library, который предоставляет неизменные версии Map, List и Set.Как мне управлять деревом неизменяемых объектов?
Моя модель приложения выглядит как дерево:
- Сцена является объектом верхнего уровня, который содержит ссылку на корневой узел.
- Каждый узел может содержать дочерние узлы и порты.
Объект график может выглядеть следующим образом:
Scene
|
+-- Node
|
+-- Node
|
+- Port
+-- Node
|
+- Port
+- Port
Если все эти объекты являются неизменяемыми, управляются верхнего уровня SceneController объекта:
- Что является лучшим способом построить эту иерархию?
- Как заменить объект, который является сколь угодно глубоким в дереве объектов?
- Есть ли способ поддерживать обратные ссылки, например. Узел, имеющий атрибут «parent»?
И в более общем плане:
- ли какие-либо модели появились для работы с этим типом данных?
- Имеется ли (академическая) литература по этой теме?
- Это хорошая идея?
Что вы уже пробовали? Почему прямое решение для каждой из 3 перечисленных проблем недостаточно для вас? – Roman
У меня есть собственная реализация для построения/замены, но мне бы хотелось услышать о шаблонах, с которыми столкнулись другие люди. – Frederik
Возможно, вам будет полезно получить копию Чисто функциональных структур данных Криса Окасаки. –