Tengo dos tipos de clientes, un tipo " Observador " y un tipo " Asunto ". Ambos están asociados con una jerarquía de grupos .
El observador recibirá datos (calendario) de los grupos con los que está asociado en las diferentes jerarquías. Estos datos se calculan combinando datos de los grupos 'principales' del grupo que intenta recopilar datos (cada grupo puede tener solo uno principal ).
El Sujeto podrá crear los datos (que recibirán los Observadores) en los grupos con los que están asociados. Cuando los datos se crean en un grupo, todos los 'hijos' del grupo también tendrán los datos, y podrán hacer su propia versión de un área específica de los datos , pero aún vinculados a los datos originales creados (en En mi implementación específica, los datos originales contendrán períodos de tiempo y títulos, mientras que los subgrupos especifican el resto de los datos para los receptores directamente vinculados a sus respectivos grupos).
Sin embargo, cuando el Sujeto crea datos, tiene que verificar si todos los Observadores afectados tienen datos que entren en conflicto con esto, lo que significa una gran función recursiva, por lo que puedo entender.
Así que creo que esto se puede resumir en el hecho de que necesito poder tener una jerarquía en la que pueda subir y bajar , y en algunos lugares poder tratarlos como un todo (básicamente, recursividad).
Además, no solo estoy apuntando a una solución que funcione. Espero encontrar una solución que sea relativamente fácil de entender (al menos en cuanto a arquitectura) y también lo suficientemente flexible como para poder recibir fácilmente funcionalidades adicionales en el futuro.
¿Existe un patrón de diseño, o una buena práctica para resolver este problema o problemas de jerarquía similares?
EDITAR :
Aquí está el diseño que tengo:
La clase "Phoenix" se llama así porque todavía no se me ocurrió un nombre apropiado.
Pero además de esto, necesito poder ocultar actividades específicas para observadores específicos , a pesar de que están unidos a ellos a través de los grupos.
Un poco fuera de tema :
Personalmente, siento que debería poder reducir este problema a problemas más pequeños, pero se me escapa cómo. Creo que es porque involucra múltiples funcionalidades recursivas que no están asociadas entre sí y diferentes tipos de clientes que necesitan obtener información de diferentes maneras. Realmente no puedo entenderlo. Si alguien puede guiarme en una dirección de cómo mejorar en encapsular problemas de jerarquía, me alegraría recibir eso también.
O(n)
algoritmos eficientes para una estructura de datos bien definida, puedo trabajar en eso. Veo que no pusiste ningún método de mutación Group
y la estructura de las jerarquías. ¿Debo asumir que estos serán estáticos?
n
con un grado de 0 mientras que cualquier otro vértice tiene un grado de al menos 1? ¿Está conectado cada vérticen
? ¿Es el camino an
único? Si pudiera enumerar las propiedades de la estructura de datos y resumir sus operaciones en una interfaz, una lista de métodos, nosotros (I) podríamos llegar a una implementación de dicha estructura de datos.