![]() |
![]() |
![]()
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.. |
|
|
![]() |
![]()
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. -------------------- |
|
|
![]()
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.. |
|
|
![]() ![]()
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 |
|
|
![]()
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.. |
|
|
![]()
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 :)
|
|
|
![]()
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.. |
|
|
![]()
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 ![]() 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 ;-)
|
|
|
![]()
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.. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 09:59 |