Я создаю цельное приложение из неизменяемых объектов, чтобы упростить реализацию многопоточности и отмены. Я использую Библиотека коллекций Google, в которой содержатся неизменные версии Map, List и Set.
Моя модель приложения выглядит как дерево:
- Сцена - это объект верхнего уровня, содержащий ссылку на корень Node.
- Каждый Node может содержать дочерние узлы и порты.
График объектов может выглядеть так:
Scene
|
+-- Node
|
+-- Node
|
+- Port
+-- Node
|
+- Port
+- Port
Если все эти объекты неизменяемы, они контролируются объектом SceneController верхнего уровня:
- Каков наилучший способ построения этой иерархии?
- Как заменить объект, который является сколь угодно глубоким в дереве объектов?
- Есть ли способ поддерживать обратные ссылки, например. a Node с атрибутом "parent"?
И в целом:
- Появились ли какие-либо шаблоны для работы с данным типом данных?
- Есть ли (академическая) литература по этому вопросу?
- Это хорошая идея?