如何操作不可变对象的树?
我正在从不可变对象构建整个应用程序,以便多线程和撤消变得更容易实现。我正在使用Google Collections Library,它提供了Map,List和Set的不可变版本。
我的应用程序模型看起来像一棵树:
- Scene 是包含对根节点的引用的顶级对象。
- 每个节点可以包含子节点和端口。
对象图可能如下所示:
Scene
|
+-- Node
|
+-- Node
|
+- Port
+-- Node
|
+- Port
+- Port
如果所有这些对象都是不可变的,则由顶级 SceneController 对象控制:
- 构造此层次结构的最佳方法是什么?
- 如何替换对象树中任意深度的对象?
- 有没有办法支持反向链接,例如具有“父”属性的节点?
更一般地说:
- 是否出现了处理此类数据的模式?
- 是否有关于该主题的(学术)文献?
- 这是个好主意吗?