poniedziałek, 5 marca 2012

Wzorzec stanu dla stron

W tym poście chciałbym przedstawić moją implementację State Pattern dla stron internetowych w ASP.NET. Zakładam, że każda strona ma dokładnie jeden stan. Wzorcem chciałbym rozwiązać podany scenariusz: Uruchamiamy stronę startową (Page 1). Z tej strony chcemy przejść do strony Page 3. Przejście jest uzależnione od spełnienia warunku (Condition). Jeżeli warunek nie jest spełniony to przechodzimy do strony Page 2, a w przeciwnym przypadku przechodzimy do strony Page 3. Również ze strony Page 2 można przejść do Page 3. Schemat działania stron przedstawiony jest poniżej:

Graficzna implementacja wzorca stanu dla stron jest zawarta w poniższym schemacie:
Klasa PageContext zawiera różne stany oraz parametry z danej strony. Klasa abstrakcyjna PageState deklaruje metodę Handle(), która jest definiowana przez konkretny stan. Klasa bazowa zawiera nazwę pliku ze stroną (np. Page1.aspx) w polu PageName. W każdej ze stron (Page*.aspx) zdefiniowane jest zdarzenie odpowiadające za zmianę stanu (przejście do innej strony). Dla strony Page1.aspx definicja wygląda następująco:
        protected void GoToNextPage(object sender, EventArgs ea)
        {
            var thisContext = new PageContext(new PageState1()) 
                                { IsChecked =  Condition1.Checked};
            thisContext.Request();
            this.Response.Redirect(thisContext.State.PageName);
        }
Klasa PageContext ma zdefiniowaną metodę Request(), która dla danego stanu wywołuje metodę Handle(). Cały przykład można pobrać z tego pliku:

Brak komentarzy:

Prześlij komentarz