Olga Grabek

Olga Grabek Senior Software
Engineer

Temat: Własny walidator z requestem na serwer

Chcę napisać walidator, który sprawdzi mi czy wartość pola username jest unikalna. Potrzebuję zatem wysłać request na serwer, by porównać dane w bazie danych. Czy da się napisać własny walidator, który będzie komunikował się z serwerem?
Łukasz Schabek

Ł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

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

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:

upload pliku na serwer




Wyślij zaproszenie do