Mam dwa typy klientów, typ „ obserwatora ” i typ „ podmiotu ”. Oba są powiązane z hierarchią grup .
Obserwator otrzyma (kalendarz) dane z grup, z którymi jest powiązany w różnych hierarchiach. Dane te są obliczane poprzez połączenie danych z grup „nadrzędnych” grupy próbujących zebrać dane (każda grupa może mieć tylko jednego rodzica ).
Podmiot będzie mógł tworzyć dane (które otrzymają Obserwatorzy) w grupach, z którymi są powiązane. Gdy dane są tworzone w grupie, wszystkie „dzieci” grupy również będą miały dane i będą mogły stworzyć własną wersję określonego obszaru danych , ale nadal będą powiązane z utworzonymi oryginalnymi danymi (w w mojej konkretnej implementacji oryginalne dane będą zawierać okres (y) i nagłówek, podczas gdy podgrupy określają pozostałe dane dla odbiorników bezpośrednio powiązanych z ich odpowiednimi grupami).
Jednak gdy podmiot tworzy dane, musi sprawdzić, czy wszyscy dotknięci obserwatorzy mają jakiekolwiek dane, które są w konflikcie z tym, co oznacza, o ile wiem, ogromną funkcję rekurencyjną.
Myślę więc, że można to podsumować faktem, że muszę mieć hierarchię, w której można wchodzić i wychodzić , a niektóre miejsca mogą traktować je jako całość (w zasadzie rekurencję).
Nie mam też na celu rozwiązania, które działa. Mam nadzieję znaleźć rozwiązanie, które jest stosunkowo łatwe do zrozumienia (przynajmniej pod względem architektury), a także wystarczająco elastyczne, aby móc w przyszłości łatwo uzyskać dodatkową funkcjonalność.
Czy istnieje wzorzec projektowy lub dobra praktyka do rozwiązania tego problemu lub podobnych problemów dotyczących hierarchii?
EDYCJA :
Oto projekt, który mam:
Klasa „Phoenix” jest tak nazywana, ponieważ nie wymyśliłem jeszcze odpowiedniej nazwy.
Ale poza tym muszę być w stanie ukryć określone działania dla konkretnych obserwatorów , nawet jeśli są do nich przywiązani poprzez grupy.
Trochę nie na temat :
Osobiście uważam, że powinienem być w stanie rozwiązać ten problem na mniejsze problemy, ale jak mi to umknie. Myślę, że dzieje się tak, ponieważ obejmuje wiele funkcji rekurencyjnych, które nie są ze sobą powiązane, oraz różne typy klientów, które muszą uzyskiwać informacje na różne sposoby. Naprawdę nie mogę się otulić. Jeśli ktoś może poprowadzić mnie w kierunku, w jaki sposób stać się lepszym w enkapsulowaniu problemów hierarchicznych, byłbym bardzo szczęśliwy, że to otrzymam.
O(n)
algorytmów dla dobrze zdefiniowanej struktury danych, mogę nad tym popracować. Widzę, że nie zastosowałeś żadnych metod mutacji Group
i struktury hierarchii. Czy mam założyć, że będą one statyczne?
n
o stopniu 0, podczas gdy co drugi wierzchołek ma stopień co najmniej 1? Czy każdy wierzchołek jest podłączonyn
? Czy ścieżka jestn
wyjątkowa? Gdybyś mógł wymienić właściwości struktury danych i wyodrębnić jej operacje do interfejsu - listy metod - my (I) moglibyśmy wymyślić implementację wspomnianej struktury danych.