Mam sytuację, w której mój rodzic wie o swoim dziecku (duh), ale chcę, aby dziecko mogło odnieść się do rodzica. Powodem tego jest to, że chcę, aby dziecko mogło określić się jako najważniejsze lub najmniej ważne, gdy ma na to ochotę. Gdy dziecko to robi, przesuwa je na górę lub dół dzieci rodzica.
W przeszłości korzystałem z właściwości WeakReference dla dziecka, aby odsyłać do rodzica, ale wydaje mi się, że to irytuje, ale może to po prostu najlepszy sposób, aby to zrobić.
Czy to tylko zły pomysł? Jak wprowadziłbyś tę umiejętność w inny sposób?
Aktualizacja 1: Dodanie więcej kontekstu. Jest to system renderowania, więc kontener nadrzędny jest listą okien zgrupowanych razem. Element podrzędny (okno) z napisem „Jestem najważniejszy!” chce być renderowane w górnej części pozostałych okien.
Rodzic jest tylko logicznym kontenerem do grupowania tych dzieci. Widzę, gdzie dodanie zdarzenia sygnalizującego prośbę o umieszczenie na szczycie jest dobrym pomysłem. Ale na bok implementacja (co dziecko chce zrobić z rodzicem), dlaczego nie chcesz mieć linkowania dziecko-> rodzic? Robią to podwójnie połączone listy, aby ludzie mogli przejść do czegoś i z czegoś.
źródło
WeakReference
. Moduł śmieci .NET może obsługiwać cykle. Jeśli dziecko nie będzie już używane (rodzic nie wskazuje na niego), zostanie ono zebrane, mimo że zawiera odniesienie do rodzica.Odpowiedzi:
Częstokroć.
Jak to zrobić lepiej? Dziecko nie powinno wiedzieć ani przejmować się, że znajduje się w kolekcji. Zamiast uważać się za ważne, powinno to sygnalizować, że wydarzyło się jakieś zdarzenie, o którym wie, aby ktokolwiek się przejmował (rodzic) mógł zwiększyć swój priorytet (lub cokolwiek to jest w kontekście kontekstu, w którym żyje dziecko). Nie jestem tym podekscytowany i być może wolałbym lepsze rozdzielenie obaw między modelem dziecka a zachowaniem istotności, ale nie mogę go rozwinąć bez większego kontekstu.
[edytować:]
Tak, systemy renderowania to jeden przypadek, w którym własność rodzica ... no cóż, nie chcę powiedzieć, że ma to sens, ale jest to jeden przypadek, w którym zostało to zrobione i nie jest końcem świata. Aby skupić się na kontroli, wolałbym projekt, w którym moduł wprowadzania danych (lub cokolwiek innego) chodzi po drzewie i wie, którą kolekcję zmienić, zamiast znajdować dziecko, wzywając coś, co wie, aby przejść do jego rodzica.
źródło
Jak egzekucja dotarła do punktu, w którym dziecko decyduje, że chce być najważniejsze? Czy dotarło tam przez rodzica? Jeśli tak, możesz wysłać referencję do rodzica do tej metody.
na przykład. jeśli wszystkie węzły mają jakąś metodę update (), która działa podobnie
możesz to zmienić na
źródło
Nie sądzę, że to zły pomysł. Możesz to rozwiązać, dodając wartość porządku sortowania do każdego dziecka. Wyobrażam sobie coś w rodzaju „indeksu z” używanego do wyświetlania obiektów na stronach lub za sobą na stronach internetowych.
Nie jestem pewien, jak byś napisał coś takiego, ale koncepcja wydaje się możliwa.
źródło