2017-04-17 2 views

Antwort

0

Es liegt immer an Ihnen, wie Sie den Code teilen, wenn es einen guten Grund für Ihre Entscheidung gibt.

Allerdings würde ich bevorzugen, die Validierungsmethode bei mindestens in den Controller zu setzen, weil es aussieht, als würde es durch ein actionevent von einer Schaltfläche ausgelöst werden. (Ereignisse sollten in der Steuerung behandelt werden)

Was Sie tun können, ist eine Methode in Ihrer Sicht zu erstellen, die eine Fehlermeldung in der GUI zeigt, wenn Ihre Validierung fehlgeschlagen ist.

All dies implice, dass auch die Regex in der Steuerung gespeichert ist.

0

Es ist keine gute Übung. Logik muss in dediziertes Layed verschoben werden. Der beste Weg besteht in der Erstellung einer dedizierten Validator-Klasse ODER in der Erstellung einer Validierungsmethode für einen Service (wenn einige Operationen wie die Suche in der Datenbank während der Validierung durchgeführt werden müssen). Auf diese Weise kann die Validierungsklasse durch Komponententests gut abgedeckt werden.

@Autowire UserInputValidator userInputValidator;

public void Validierung() throws Exception {

if(userInputValidator.validate(param1, param2)){ 
    throw new exception("..."); 
} 
... 

}

0

Während wir über MVC sprechen, ist es immer am besten, dass zu prüfen, wie die App entwickelt, "Input" von mehr kommen kann als ein Ort irgendwann.

  • Benutzer
  • Service-Aufruf
  • Datei
  • andere

In diesem Fall würden wir nicht die Validierungsmechanismen in die Ansicht oder den Controller bauen wollen, aber in einer anderen Komponente mit dem der Controller nur arbeiten/integrieren würde.

Validierung kann eine Querschnittsanliegen sein (aber nicht immer)

Im Idealfall würden wir die Validierung der eingehenden Daten vermeiden wollen Duplizieren vor allem, wenn die Daten in der gleichen Art und Weise immer gültig sind. Das Duplizieren der Validierung kann zu Inkonsistenzen führen. Stellen Sie sich vor, dass Daten von der Benutzeroberfläche ungültig sind, aber dieselben Daten von einem Serviceaufruf als "OK" betrachtet werden.

Es gibt eine Reihe von Möglichkeiten, wie Sie die Validierungslogik aus Ihrer Sicht trennen kann:

  • Beschriften Bohnen für JSR-303
    • benutzerdefinierte Validierung Anmerkungen erstellen (Ihre definierten regex die abstrahierende) und/oder die Verwendung Bibliotheken, die einige basic ones
  • Dedicated Service
  • bieten

Fehler bei der Validierung beheben

Ich kann sehen, dass Sie eine Ausnahme auslösen, wenn Sie einen Validierungsfehler haben. Betrachten Sie den fantastischen Artikel von Martin Fowler. Der Vorschlag ist, dass ein Validierungsfehler erwartet werden kann und kein Exception Fall ist. Er schlägt auch einen Benachrichtigungsansatz vor.

Ein weiterer Vorteil eines Benachrichtigungsansatzes besteht darin, dass Ihr dedizierter Validierungsdienst/Tier mehrere Fehler bei der Validierung unterstützen kann. Dies würde es Ihrer Sicht ermöglichen, mehrere Felder oder Ihre API hervorzuheben, um eine Liste von Fehlern zurückzugeben.

Verwandte Themen