Estoy construyendo una aplicación completa a partir de objetos inmutables para que el multi-threading y deshacer sea más fácil de implementar. Estoy usando el Google Collections Library que proporciona versiones inmutables de Mapa, Lista y Conjunto.¿Cómo manipulo un árbol de objetos inmutables?
Mi modelo de aplicación se parece a un árbol:
- Escena es un objeto de nivel superior que contiene una referencia a un nodo raíz.
- Cada nodo puede contener nodos y puertos secundarios.
Un gráfico de objetos podría tener este aspecto:
Scene
|
+-- Node
|
+-- Node
|
+- Port
+-- Node
|
+- Port
+- Port
Si todos estos objetos son inmutables, controlado por un objeto de nivel superior SceneController:
- ¿Cuál es la mejor manera de construir esta jerarquía?
- ¿Cómo reemplazaría un objeto que es arbitrariamente profundo en el árbol de objetos?
- ¿Hay alguna manera de admitir enlaces de retroceso, p. un nodo que tiene un atributo "principal"?
Y más en general:
- Tener cualquier patrón surgió para hacer frente a este tipo de datos?
- ¿Hay literatura (académica) disponible sobre el tema?
- ¿Es esta una buena idea?
¿Qué has probado ya? ¿Por qué una solución sencilla para cada uno de los 3 problemas enumerados no es lo suficientemente buena para usted? – Roman
Tengo mi propia implementación para construir/reemplazar, pero me encantaría escuchar sobre los patrones que otras personas han encontrado. – Frederik
Puede que le resulte útil obtener una copia de Estructuras de datos puramente funcionales de Chris Okasaki. –