Eu tenho dois tipos de clientes, um tipo " Observador " e um tipo " Assunto ". Ambos estão associados a uma hierarquia de grupos .
O Observador receberá dados (do calendário) dos grupos aos quais está associado nas diferentes hierarquias. Esses dados são calculados combinando dados de grupos 'pai' do grupo que tenta coletar dados (cada grupo pode ter apenas um pai ).
O Sujeito poderá criar os dados (que os Observadores receberão) nos grupos aos quais estão associados. Quando os dados são criados em um grupo, todos os 'filhos' do grupo também terão os dados, e eles poderão criar sua própria versão de uma área específica dos dados , mas ainda vinculados aos dados originais criados (em Na minha implementação específica, os dados originais conterão período (s) e título, enquanto os subgrupos especificam o restante dos dados para os receptores diretamente vinculados a seus respectivos grupos).
No entanto, quando o Assunto cria dados, ele deve verificar se todos os Observadores afetados têm dados conflitantes , o que significa uma enorme função recursiva, tanto quanto eu posso entender.
Então, acho que isso pode ser resumido ao fato de que preciso ter uma hierarquia na qual você possa subir e descer , e alguns lugares possam tratá-los como um todo (recursão, basicamente).
Além disso, não estou apenas buscando uma solução que funcione. Espero encontrar uma solução que seja relativamente fácil de entender (pelo menos em termos de arquitetura) e também suficientemente flexível para poder receber facilmente funcionalidades adicionais no futuro.
Existe um padrão de design, ou uma boa prática a seguir, para resolver esse problema ou problemas de hierarquia semelhantes?
EDIT :
Aqui está o design que tenho:
A classe "Phoenix" tem esse nome porque ainda não pensei em um nome apropriado.
Mas além disso, preciso ser capaz de ocultar atividades específicas para observadores específicos , mesmo que elas estejam ligadas a eles através dos grupos.
Um pouco fora do tópico :
Pessoalmente, acho que devo ser capaz de reduzir esse problema a problemas menores, mas me escapa como. Eu acho que é porque envolve várias funcionalidades recursivas que não estão associadas uma à outra e diferentes tipos de clientes que precisam obter informações de maneiras diferentes. Eu realmente não posso envolver minha cabeça em torno disso. Se alguém puder me orientar na direção de como melhorar o encapsulamento de problemas de hierarquia, ficaria muito feliz em receber isso também.
O(n)
algoritmos eficientes para uma estrutura de dados bem definida, posso trabalhar nisso. Vejo que você não adotou nenhum método de mutação Group
e a estrutura das hierarquias. Devo assumir que estes serão estáticos?
n
com um grau de 0, enquanto todos os outros vértices têm um grau de pelo menos 1? Todo vértice está conectadon
? O caminho én
único? Se você pudesse listar as propriedades da estrutura de dados e abstrair suas operações em uma interface - uma lista de métodos -, nós (I) poderíamos propor uma implementação da referida estrutura de dados.