Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Łańcuchy akcji
splatch
post
Post #1





Grupa: Zarejestrowani
Postów: 487
Pomógł: 7
Dołączył: 7.01.2004
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Witam serdecznie.

Jakiś czas temu zacząłem się zastanawiać nad łańcuchami. W OPB widziałem ActionChain, gdzieś indziej FilterChain i cały czas mnie zastanawia czy słowo łańcuch jest na miejscu, czy nie lepiej pasuje stos?

Gdy rozrysowałem sobie przykładowy łańcuch wyglądał on tak:

Kod
Wpisz token  -> Wypełnij formularz -> Wpisz kod aktywacyjny
                                                      \ onError = break

Domyślnie, kiedy akcja zwróci wartość true jest wywoływane kolejne ogniwo. Gdy zwróci false jest powtarzana. Atrybut onError mówi co zrobić, gdy wystąpi błąd. Tak więc wymyśliłem następujące zapisy:
Kod
onError = stop - zatrzymuje akcję (domyślnie)
onError = back - poprzednia akcja
onError = break - przerywa łańcuch

Odwołania do danych, które zostały podane wcześniej można realizować poprzez sesję, w której zapisywane są wartości pochodzące z formularzy.
Myślę też nad zastosowaniem czegoś na kształt beanów z javy, które byłyby przesyłane poprzez sesje.

Moje pytanie brzmi, czy ktoś miał styczność z taką interpretacją łańcucha, czy istnieje jakaś inna nazwa na to (akcje wiązane?) i w końcu co o tym sądzicie? Zapraszam do dyskusji. :]


--------------------
Łukasz Dywicki
Independent Java and open source software consultant.
Blog - Java, OSGi, integracja oprogramowania..
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
Vengeance
post
Post #2





Grupa: Zarejestrowani
Postów: 657
Pomógł: 2
Dołączył: 15.08.2003
Skąd: Łódź

Ostrzeżenie: (0%)
-----


Wg mnie łańcuchy nie są potrzebne.

A co do ActionChain i FilterChain to dwie różne rzeczy :] FilterChain zarządza filtrami.


--------------------
Go to the top of the page
+Quote Post
splatch
post
Post #3





Grupa: Zarejestrowani
Postów: 487
Pomógł: 7
Dołączył: 7.01.2004
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


@Vee wiem co robi ActionChain i FilterChain, chodzi mi o to, że działają one nie jak łańcuch a jak stos


--------------------
Łukasz Dywicki
Independent Java and open source software consultant.
Blog - Java, OSGi, integracja oprogramowania..
Go to the top of the page
+Quote Post
Kas
post
Post #4





Grupa: Zarejestrowani
Postów: 425
Pomógł: 0
Dołączył: 28.05.2005
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Nie wiem czy dobrze rozumiem...
Ale to jest poprostu wykonywanie kolejnych kroków alogrytmu?


--------------------
nospor, jestem z Wami.
Alpha IT
Go to the top of the page
+Quote Post
splatch
post
Post #5





Grupa: Zarejestrowani
Postów: 487
Pomógł: 7
Dołączył: 7.01.2004
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Dokładnie z tą różnicą, że są to odmienne akcje, które mogą robić różne rzeczy. Aby zachować przejrzystość każda akcja to oddzielny plik i klasa. Jeśli znasz prado był tam komponent Wizzard.

Przykładowo - pierwsza akcja generuje formularz i obrazek z napisem, następnie sprawdza czy przesłany formularz był poprawny (wygenerowany napis==napis wpisany w formularzu), jeśli tak to zwraca true i wyświetla formularz z polami login, hasło itp, następnie go sprawdza, jeśli wszystko dobrze to to generuje email z kodem aktywacyjnym i zwraca true. Po tym jest wyświetlana ostatnia strona, która oczekuje na poprawny klucz.
Gdy użytkownik wpisze odpowiedni klucz ostatnia akcja zwraca true i system zamyka łańcuch poprzez redirect to zdefiniowanej strony.


--------------------
Łukasz Dywicki
Independent Java and open source software consultant.
Blog - Java, OSGi, integracja oprogramowania..
Go to the top of the page
+Quote Post
NuLL
post
Post #6





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

Ostrzeżenie: (0%)
-----


No dobra - mamy ten tam sobie łańcuch. Są 3 akcje - Są w nich operacje na bazie. W 3 akcji coś na bazie się zwali. Co teraz ? A 3 akcja nie może działać bez wykonania zapytanie w akcji trzeciej i otrzymania od niej wyniku ? Macie pomysł jak to wrócić ?


--------------------
Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
Go to the top of the page
+Quote Post
splatch
post
Post #7





Grupa: Zarejestrowani
Postów: 487
Pomógł: 7
Dołączył: 7.01.2004
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Kto mówi, że wszystko musi być zapisywane w bazie? Ostatnia akcja, która finalizuje łańcuch zczytuje wartości z odpowiednich beanów, rozpoczyna transakcję i wrzuca do bazy co trzeba, jeśli coś się zwali to transakcja zostanie automatycznie przerwana. Nie tracimy danych, bo cały czas mamy beany z poprzednich akcji i możemy do nich bez problemu wrócić.


--------------------
Łukasz Dywicki
Independent Java and open source software consultant.
Blog - Java, OSGi, integracja oprogramowania..
Go to the top of the page
+Quote Post
squid
post
Post #8





Grupa: Zarejestrowani
Postów: 358
Pomógł: 0
Dołączył: 3.07.2003
Skąd: Szczecin->niebuszewo->*(next to window)

Ostrzeżenie: (0%)
-----


Cytat(splatch @ 2005-08-10 12:10:13)
Kto mówi, że wszystko musi być zapisywane w bazie? Ostatnia akcja, która finalizuje łańcuch zczytuje wartości z odpowiednich beanów, rozpoczyna transakcję i wrzuca do bazy co trzeba, jeśli coś się zwali to transakcja zostanie automatycznie przerwana. Nie tracimy danych, bo cały czas mamy beany z poprzednich akcji i możemy do nich bez problemu wrócić.

Dokladnie smile.gif
Tylko takie rozwiazanie moze byc kosztowne pamieciowo, testowales cos takiego? naraz 1000 uzytkowniko zainicjalizuje te sam lancuch akcji i kazde wywolanie ma trzymac w pamieci (w bean'ach) miedzy poczatkiem a koncem lancucha, co wtedy?

Uwielbiam prostote, u siebie domyslnie mam zawsze tylko jedna akcje ale jesli jej zadania sa rozbudowane to w zasadzie dziala jak appControler rozdzielajac zadania na mniejsze akcje, a miare mozliwosci tylko ona (ta glowna) operuje na bazie danych choc nie musi.
Moge tez zwrocic nazwe nastepnej akcji jaka ma byc wykonana wtedy mam lancuch "tradycyjny".

Ale nie rozumiem czemu chcesz nazwac swoje rozwiazanie stosem, musialbys stworzyc sobie lancuch i wykonywac go od tylu ( FILO ) zeby to bylo stosem

Ten post edytował squid 10.08.2005, 12:12:02


--------------------
Jeśli życie to kara to nieźle nabroiłem ;-)
Go to the top of the page
+Quote Post
splatch
post
Post #9





Grupa: Zarejestrowani
Postów: 487
Pomógł: 7
Dołączył: 7.01.2004
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


@squid nie testowałem, to rozwiązanie jest cały czas w fazie projektowania. Fakt, użycie pamięci może skoczyć, ale przecież nie za każdym razem wszystkie beany będą używane. Myślę, żeby można było ustawić scope'a dla każdego, który pośrednio by definiował długość życia beana. To znaczy:
Kod
scope=request --- tylko jedno rządanie
scope=session -- sesja
scope=application -- zserializowany obiekt zapisany w pliku

Swojego rozwiązania nie nazywam stosem, ponieważ stos jest prosty nie można z jednego stosu wywołać drugiego, tzn. przerywam jeden ActionChain i zaczynam drugi. IMO FilterChain i ActionChain to nic innego jak stos z wzorcem kompozytu (?) gdzie idzie foreach - $item->execute();.
Łańcuch ma przetrwać dłużej niż jeden request. Pośrednio chodzi o wykonywanie akcji w określonej kolejności, z tym, że jest ona definiowana w pliku konfiguracyjnym, a nie przez same akcje i fallbacki.

Ten post edytował splatch 10.08.2005, 12:25:16


--------------------
Łukasz Dywicki
Independent Java and open source software consultant.
Blog - Java, OSGi, integracja oprogramowania..
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 09:59