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