Chciałbym się poradzić odnośnie sposobu rozwiązania problemu z tematu. Rozwijam aplikację gis-ową w której użytkownicy jako jeden z problemów zgłaszali brak funkcji cofnij. W uproszczeniu aplikacja zawiera mapy dróg, które można modyfikować na wiele sposobów, wyznaczać najkrótsze drogi itp. Każda droga czy każdy jej odcinek ma swoje atrybuty jak: rodzaj nawierzchni, długość, ilość pasów itp. Dokonując zmian można zmienić parametry w jednym odcinku, w kilku zaznaczonych, we wszystkich. Ze względu na mnogość opcji nie wiem za bardzo jak zabrać się za opcję cofania operacji. Standardowo w aplikacjach opcja 'cofnij' zawiera historię operacji i wykonuje operacje przeciwne aby powrócić do poprzedniego stanu. Tutaj jest to chyba bardziej skomplikowane. Załóżmy że są 3 odcinku drogi: leśna, autostrada, wojewódzka. User zmienia sobie typ wszystkich dróg na drogę lokalną. Zapis historii operacji raczej nie pomoże bo każdy 'obiekt' wraca do innego stanu. Zmiany mogą obejmować zmiany różnych parametrów. Dochodzi do tego dodawanie i usuwanie 'obiektów' (dróg i innych elementów warstw gis-owych). Moje przemyślenia są następujące.
- Trzymać w pamięci całe kopie zmienianych elementów i wracać do poprzednich stanów (może zajmować sporo pamięci, duże projekty zajmują do 500 MB a dodając jakieś operacje do pamięci może się to sporo rozrosnąć).
- Tworzyć kopie elementów na dysku (nie wiem czy jest to możliwe bo elementy są zapisywane w plikach poszczególnych warstw, wszystkie elementy na danej warstwie w jednym pliku)
#Stworzyć coś na wzór historii operacje w bazie danych gdzie jako blob lub bliżej nie określona struktura będzie trzymała obiekt przez zmianą (właśnie nie wiem jak miałaby wyglądać struktura takiej bazy).
Czy ktoś miał doświadczenia z operacją cofania na złożonych strukturach i mógłbym podpowiedzieć jak się do tego zabrać. Może są jakieś inne opcje niż to co wymieniłem. W Autocadzie bardzo fajnie działa tak opcja i chce stworzyć coś na ten wzór. Będę wdzięczny za pomoc.