3 Stimmen

Ein Muster für Stapel von Urls

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?

1voto

Cratylus Punkte 51546

Was Sie getan haben, erscheint mir vernünftig. Um ehrlich zu sein, fällt mir im Moment kein Entwurfsmuster ein, das Ihr Problem löst, aber ich denke, wenn neben dem cancelStack behalten Sie einen Verweis auf die currentURL so dass Sie die currentURL nur dann auf den Stapel, wenn Sie nicht auf einer Abbruchseite landen, werden Sie die zusätzlichen pop die Sie verärgert.
Andernfalls müssen Sie pop die Spitze des cancelStack .
Z.B. in Ihrem Beispiel:

Angenommen, wir haben die Seiten A und B, wobei A zu B führt...

currentUrl ist A. Die Aktion für A wird nicht aufgehoben, also currentUrl d.h. A wird in den cancelStack . Dann ist es eine Aktion für B y currentURL es B aber die Aktion wird so abgebrochen B wird nicht auf den Stapel gelegt. Daher ist der oberste Punkt von cancelStack es A (während currentUrl es B ). Wenn Sie also pop die cancelStack Sie abrufen A (nicht extra pop benötigt)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X