To ma sensu do mnie, że validate
musiałaby być wywołana przed pytaniem obiektu czy hasErrors
(lub save
do odpowiednich obiektów domeny, który wzywa validate
pod kołdrą). Walidacja w tym kontekście oznacza "sprawdź, czy ten obiekt jest prawidłowy i wskaż błędy, jeśli nie".
Alternatywnie, implementacja GORM musiałaby wywoływać validate
za każdym razem, gdy wprowadzana jest zmiana w obiekcie, co dla mnie byłoby mniej pożądanym zachowaniem, ponieważ może wymagać dużej ilości pracy wykonywanej często i niepotrzebnie (niektóre z tych ograniczeń mogłyby wymaga dużego nakładu pracy).
Początek sekcji 7.2 jasno stwierdza: "Aby zweryfikować klasę domen, można wywołać metodę sprawdzania poprawności dla dowolnej instancji". Stwierdza również, że "w obrębie Grails istnieją zasadniczo dwie fazy sprawdzania poprawności, pierwsza faza to powiązanie danych, które występuje, gdy wiążesz parametry żądania z instancją, na przykład ... W tym momencie możesz już mieć błędy we właściwościach błędów z powodu Konwersja typów (np. konwersja ciągów na daty) Możesz sprawdzić te i uzyskać oryginalną wartość wejściową za pomocą interfejsu API błędów ... Druga faza sprawdzania poprawności ma miejsce, gdy wywoływane jest sprawdzanie poprawności lub zapisywanie To jest, gdy Grails sprawdzi powiązanie wartości ponownie określa zdefiniowane więzy. "
Wymienia to również documentation for hasErrors
. Możesz uzyskać do niego dostęp, znajdując wywołanie metody w ramce nawigacji po lewej stronie, gdy jesteś na documentation site. Zawsze polecam przeglądanie tych stron, a także bardziej opisowych stron podręcznika użytkownika, ponieważ często dają trochę więcej szczegółów. Here's the page for the validate
method też.
Nigdy nie miałem problemu z bezpośrednim dzwonieniem pod numer validate
- dla mnie jest to bardzo jasne i mogę wybrać punkt, w którym wykonano całą pracę, i jestem gotowy na walidację. Nie widzę opcji, aby zmienić to zachowanie w dowolnym miejscu, ale jeśli chcesz, aby validate
było wywoływane automatycznie lub pod pewnymi warunkami, możesz użyć magii Groovy do programowania meta przez dodanie do klasy invokeMethod
i wywołanie jej przed wywołaniem validate
niektóre zaproszenia. Zobacz: here i here. (Nie jestem pewien, czy bym to polecił i pamiętaj, że twoja klasa będzie teraz zależna od tego, czy użyjesz jej w ramach sprawdzania poprawności GORM, ponieważ metoda validate
mogłaby nie istnieć inaczej).
Dziękuję za ostrożną odpowiedź, rozumiem to teraz. –
Nawiasem mówiąc ... Peter Ledbrook (jeden z autorów znakomitej książki Grails in Action) napisał świetną serię artykułów na temat GORM Gotchas - bardzo warto przeczytać, aby poznać niektóre szczegóły tego wszystkiego. działa: [część 1] (http://blog.springsource.com/2010/06/23/gorm-gotchas-part-1/), [część 2] (http://blog.springsource.com/2010/ 07/02/gorm-gotchas-part-2 /) i [part 3] (http://blog.springsource.com/2010/2010/28/gorm-gotchas-part-3/). –