J'ai deux types de clients, un type " Observateur " et un type " Objet ". Ils sont tous deux associés à une hiérarchie de groupes .
L'observateur recevra les données (calendaires) des groupes auxquels il est associé dans les différentes hiérarchies. Ces données sont calculées en combinant les données des groupes «parents» du groupe essayant de collecter des données (chaque groupe ne peut avoir qu'un seul parent ).
Le sujet pourra créer les données (que les observateurs recevront) dans les groupes auxquels ils sont associés. Lorsque des données sont créées dans un groupe, tous les «enfants» du groupe auront également les données, et ils pourront créer leur propre version d'une zone spécifique des données , mais toujours liées aux données d'origine créées (dans mon implémentation spécifique, les données d'origine contiendront la ou les périodes et le titre, tandis que les sous-groupes spécifient le reste des données pour les récepteurs directement liés à leurs groupes respectifs).
Cependant, lorsque le sujet crée des données, il doit vérifier si tous les observateurs concernés ont des données en conflit avec cela, ce qui signifie une énorme fonction récursive, pour autant que je puisse comprendre.
Je pense donc que cela peut se résumer au fait que je dois pouvoir avoir une hiérarchie dans laquelle vous pouvez monter et descendre , et certains endroits peuvent les traiter comme un tout (récursion, essentiellement).
De plus, je ne vise pas seulement une solution qui fonctionne. J'espère trouver une solution relativement facile à comprendre (au moins en termes d'architecture) et également suffisamment flexible pour pouvoir recevoir facilement des fonctionnalités supplémentaires à l'avenir.
Existe-t-il un modèle de conception ou une bonne pratique pour résoudre ce problème ou des problèmes de hiérarchie similaires?
MODIFIER :
Voici le design que j'ai:
La classe "Phoenix" est nommée ainsi parce que je n'ai pas encore trouvé de nom approprié.
Mais en plus de cela, je dois pouvoir cacher des activités spécifiques pour des observateurs spécifiques , même s'ils y sont attachés par le biais des groupes.
Un peu hors sujet :
Personnellement, je pense que je devrais être capable de couper ce problème en petits problèmes, mais cela m'échappe comment. Je pense que c'est parce qu'il implique plusieurs fonctionnalités récursives qui ne sont pas associées les unes aux autres et différents types de clients qui doivent obtenir des informations de différentes manières. Je ne peux pas vraiment envelopper ma tête. Si quelqu'un peut me guider sur la façon de mieux encapsuler les problèmes de hiérarchie, je serais très heureux de le recevoir également.
O(n)
algorithmes efficaces pour une structure de données bien définie, je peux y travailler. Je vois que vous n'avez pas appliqué de méthode de mutation Group
ni de structure des hiérarchies. Dois-je supposer que ceux-ci seront statiques?
n
avec un degré de 0 alors que chaque autre sommet a un degré d'au moins 1? Chaque sommet est-il connectén
? Le chemin vers l'n
unique est-il unique? Si vous pouviez lister les propriétés de la structure de données et en résumer les opérations à une interface - une liste de méthodes - nous (I) pourrions peut-être trouver une implémentation de ladite structure de données.