2017-03-19 1 views
2

Ist die Reihenfolge, wie Validierungen ausgeführt werden, immer gleich? Wie ist es bestellt?Reihenfolge der Validierungen

Für diese Einschränkungen:

static constraints = { 
    A ... 
    B ... 
    C ... 
} 

Ist es immer wahr, dass sie in der Reihenfolge A ausgeführt werden -> B -> C?

Warum brauche ich es?

In der Validierung von A Ich muss gegen eine db überprüfen, dass eine Kennung existiert. Wenn nicht, würde ich die Validierung nicht bestehen. B und C sind abhängig von dem Wert nachgeschlagen.

+0

Was wollen Sie eigentlich erreichen? was ist deine Anforderung? –

+1

Spielt es eine Rolle? –

+0

Jungs, ich habe die Frage bearbeitet. Siehe den neuen Abschnitt "Warum brauche ich das?" – zatziky

Antwort

2

Angesichts der Tatsache, dass die Bestellung nicht von Grails selbst garantiert wird und zwischen den Versionen wechseln kann, ist jede Abhängigkeit, die Sie daran stellen, bestenfalls fragil.

Dies würde vorschlagen, dass Sie das Problem falsch nähern.

Angesichts Ihrer Situation der Felder B und C in Abhängigkeit von A wäre die richtige Lösung, einen benutzerdefinierten Validator für A zu implementieren, der alle drei berücksichtigt.

Etwas wie folgt aus:

a(validator: { val, obj, errors -> 
    if (!val ...) { 
    errors.rejectValue('a', 'whatever.problem') 
    return 
    } 
    if (!obj.b ...) { 
    errors.rejectValue('b', 'some.other.problem') 
    return 
    } 
    if (!obj.c ...) { 
    errors.rejectValue('c', 'another.problem') 
    return 
    } 
}) 
+0

Josh, es löst das Problem immer noch nicht. Die B und C werden vor A validiert, sind aber abhängig von A. Ich teile die Validierung und 'A.validate()', 'B.validate()' und 'C.validate()'. Grails Ansatz scheint mir in diesem Fall (und anderen Fällen auch) sehr einschränkend zu sein. – zatziky

+0

Entfernen Sie die anderen Validierungen, die Sie für B und C haben, und kapseln Sie sie bei der Validierung von A ein, damit sie abhängig ausgeführt werden können (z. B. einzelne Arbeitseinheit). –

+0

Also, wenn mein Objekt Felder A, B und C hat, empfehlen Sie, nur einen Validator für A zu haben und die anderen 2 zu testen? – zatziky