У мене є два типи клієнтів, тип " спостерігач " і " суб'єкт ". Вони обоє пов'язані з ієрархією груп .
Спостерігач отримає (календар) дані від груп, з якими він асоціюється, у різних ієрархіях. Ці дані обчислюються, комбінуючи дані з "батьківських" груп групи, яка намагається збирати дані (у кожній групі може бути лише один батьківський ).
Суб'єкт зможе створювати дані (які отримуватимуть спостерігачі) у групах, з якими вони пов’язані. Коли дані створюються в групі, всі "діти" групи також матимуть дані, і вони зможуть скласти свою власну версію певної області даних , але все ще пов'язану з вихідними даними, створеними (у в моїй конкретній реалізації, вихідні дані будуть містити часовий період (і) та заголовок, тоді як підгрупи визначають решту даних для приймачів, безпосередньо пов'язаних з їх відповідними групами).
Однак, коли Суб’єкт створює дані, він повинен перевірити, чи є у всіх постраждалих спостерігачів якісь дані, що суперечать цьому, що означає величезну рекурсивну функцію, наскільки я можу зрозуміти.
Тому я думаю, що це можна підсумувати тому, що мені потрібно мати ієрархію, за якою можна підніматися вгору і вниз , а в деяких місцях можна розглядати їх як ціле (рекурсія, в основному).
Крім того, я не просто націлений на рішення, яке працює. Я сподіваюся знайти рішення, яке є досить простим для розуміння (принаймні розумним для архітектури), а також досить гнучким, щоб мати можливість отримувати додаткові функціональні можливості в майбутньому.
Чи існує модель дизайну чи добра практика, щоб вирішити цю проблему чи подібні проблеми з ієрархією?
Редагувати :
Ось дизайн у мене:

Клас "Фенікс" названий таким чином, тому що я ще не придумав відповідної назви.
Але крім цього мені потрібно вміти приховувати конкретні заходи для конкретних спостерігачів , навіть якщо вони приєднуються до них через групи.
Трохи поза темою :
Особисто я відчуваю, що мені слід вдаватись до того, щоб вирішити цю проблему до менших проблем, але мені це вдається уникнути. Я думаю, це тому, що він включає в себе безліч рекурсивних функцій, не пов'язаних один з одним і різними типами клієнтів, яким потрібно отримувати інформацію різними способами. Я не можу реально обернути голову навколо цього. Якщо хтось може направити мене в напрямку, як стати кращим у вирішенні проблем ієрархії, я би дуже радий отримати це.
O(n)алгоритми для чітко визначеної структури даних, я можу над цим працювати. Я бачу, ви не вкладали жодних мутуючих методів Groupта структури ієрархій. Чи варто вважати, що вони будуть статичними?
nзі ступенем 0, тоді як кожна інша вершина має ступінь принаймні 1? Чи пов'язана кожна вершинаn? Чи шлях доnунікального? Якщо ви зможете перерахувати властивості структури даних і віднести її операції до інтерфейсу - переліку методів - ми (I), можливо, зможемо придумати реалізацію зазначеної структури даних.