Ich habe eine folgende Frage. Wir haben eine Anwendung, die im Wesentlichen aus einer Reihe von JSPs und Aktionsklassen besteht, die die Interaktion mit dem Benutzer steuern. Die Aktionen legen einige Parameter fest, die für die korrekte Anzeige der Seite erforderlich sind. Die URLs im System enthalten immer den Namen des Ereignisses, das definiert, welche Seite als nächstes aufgerufen werden soll.
Jetzt hat fast jede Seite eine Abbrechen-Schaltfläche, die zur vorherigen Seite führen sollte. Von Anfang an war die URL jeder Abbrechen-Schaltfläche streng definiert, aber schließlich, als das System immer größer wurde, erwies es sich als ziemlich schwierig, die Logik für diese Schaltfläche so zu programmieren, dass sie genau zur vorherigen Seite führt.
Angenommen, wir haben drei Seiten, A, B und C. Seite A hat einen Link, der zu Seite B führt, und B hat einen Link, der zu C führt. Daher hat C eine URL, die sogar zu B führt (und außerdem den Schlüssel der Entität enthält, die auf B angezeigt werden soll). Nehmen wir jedoch an, dass Seite A geändert wurde und nun auch einen Link auf C hat. Nun müssen wir die Seite C überprüfen, von der wir gekommen sind, und die URL entsprechend setzen, und die Logik wird ziemlich durcheinander.
Deshalb habe ich meinem Team die folgende Lösung vorgeschlagen. Die Benutzersitzung sollte ein spezielles Objekt namens CancelStack enthalten. Jede Aktion, die zu einer Seite führt, sollte ihre URL in den Stapel schieben (mit dem Ereignis und einigen zusätzlichen Daten, die erforderlich sind). Auf jeder Seite sollte die Abbrechen-Schaltfläche nun eine Url haben, die zu einem speziellen Ereignis führt, genannt cancelStack.
Die Aktion cancelStack bewirkt Folgendes:
- Ruft den Stornostapel aus der Sitzung ab.
- Löschen Sie die letzte Url und verwenden Sie sie NICHT.
- Geben Sie die URL erneut ein und leiten Sie zu dieser URL weiter.
Warum wird die letzte Url abgerufen, ohne sie zu verwenden? Angenommen, wir haben die Seiten A und B, wobei A zu B führt. Die Aktion für A platziert ihre URL innerhalb des Stapels, und dies sollte die Abbruch-Url für die Seite B sein. Jetzt platziert die Aktion für B ihre URL innerhalb des Stapels. Daher lösche ich sie, ohne sie zu verwenden, und lösche dann die erste Url, leite die Aktion zu A um, und diese Aktion fügt die Url von A wieder zum Stapel hinzu (daher verringert sich die Stapelgröße nur um 1, nicht um 2).
Es scheint ein ziemlich gutes Schema zu sein, aber es scheint ziemlich seltsam, dass das oberste Element des Stapels ohne Verwendung gepoppt wird. Daher habe ich eine Frage. Gibt es ein Design-Muster, um die Reihenfolge der URLs innerhalb der Sitzung zu speichern, um die Abbrechen-Schaltflächen richtig zu organisieren?