Olga
Grabek
Senior Software
Engineer
Łukasz Schabek Architekt Rozwiązań
Temat: Własny walidator z requestem na serwer
Na pewno tak, tylko pytanie, czy to się opłaca? ;) Teoretycznie, jest to mało wydajne, bo trzeba wykonać co najmniej dwa requesty do bazy:- zapytanie o unikalność
- zapis danych
Można też zrobić inaczej, tj. zapisać dane i sprawdzić komunikat zwrotny z bazy. Jeśli dostaniemy błąd o naruszeniu Constantinów (w przypadku MySQL 1062:Duplicate entry for key) można go odpowiednio obsłużyć już w aplikacji.
Zależy czy chcemy zaoszczędzić na pamięci serwera czy klienta ;)
konto usunięte
Temat: Własny walidator z requestem na serwer
Bez przesady, co tu optymalizować? Prawdopodobnie chodzi o formularz rejestracji, a raczej nie będzie on wyświetlany kilka razy na sekundę (choć pewnie im częściej, tym lepiej ;-))Anyway. W ogólności własny walidator można stworzyć dosyć prosto, przykładowy kod jest tutaj. Zasadniczo wystarczy rozszerzyć klasę Validator i przesłonić metodę doValidation(), która przyjmuje jako parametr obiekt do walidacji i zwraca pustą tablicę w przypadku powodzenia lub tablicę błędów (obiekty klasy ValidationResult).
Problem jednak w tym, że odpytanie zdalnego serwera, czy to przez HTTP, czy AMF, odbywa się w sposób asynchroniczny, a walidator działa w sposób synchroniczny, tzn. wynik walidacji jest na wyjściu metody wywołującej walidację. To znaczy, że odpowiedź z serwera musi zostać odebrana i obsłużona przed wyjściem z metody doValidation(), a tego nie da się zagwarantować. Już kilka razy szukałem sposobu na synchroniczną komunikację ze zdalnymi usługami i nie ma żadnych dobrych rozwiązań, wszystkie są karkołomnymi obejściami.
W związku z tym prawdopodobnie konieczne byłoby stworzenie całego mechanizmu walidacji, który umożliwiałby asynchroniczne działanie walidatorów. Pytanie, czy gra jest warta świeczki.
Olga
Grabek
Senior Software
Engineer
Temat: Własny walidator z requestem na serwer
Jakub Z.:
Bez przesady, co tu optymalizować? Prawdopodobnie chodzi o formularz rejestracji, a raczej nie będzie on wyświetlany kilka razy na sekundę (choć pewnie im częściej, tym lepiej ;-))
Anyway. W ogólności własny walidator można stworzyć dosyć prosto, przykładowy kod jest tutaj. Zasadniczo wystarczy rozszerzyć klasę Validator i przesłonić metodę doValidation(), która przyjmuje jako parametr obiekt do walidacji i zwraca pustą tablicę w przypadku powodzenia lub tablicę błędów (obiekty klasy ValidationResult).
Problem jednak w tym, że odpytanie zdalnego serwera, czy to przez HTTP, czy AMF, odbywa się w sposób asynchroniczny, a walidator działa w sposób synchroniczny, tzn. wynik walidacji jest na wyjściu metody wywołującej walidację. To znaczy, że odpowiedź z serwera musi zostać odebrana i obsłużona przed wyjściem z metody doValidation(), a tego nie da się zagwarantować. Już kilka razy szukałem sposobu na synchroniczną komunikację ze zdalnymi usługami i nie ma żadnych dobrych rozwiązań, wszystkie są karkołomnymi obejściami.
W związku z tym prawdopodobnie konieczne byłoby stworzenie całego mechanizmu walidacji, który umożliwiałby asynchroniczne działanie walidatorów. Pytanie, czy gra jest warta świeczki.
No właśnie, dokładnie o to mi chodziło, by wykorzystać do tego własny walidator, rozszerzający klasę Validator. Też szukałam i też jak na razie nie znalazłam żadnego sensownego rozwiązania.
Olga
Grabek
Senior Software
Engineer
Temat: Własny walidator z requestem na serwer
Z rana jednak się lepiej szuka :)Rule based & asynchronous validation in Flex forms
Następna dyskusja: