2009-03-25 22 views
0

Ich habe ein Objekt, das ich validieren muss. Dieses Objekt hat Eigenschaften, die nicht null sein können, Zeichenfolgen, die eine gegebene Größe nicht überschreiten können, und Datumsstrings, die ich auf Formatkorrektheit überprüfen muss.Object Validation

Wie würden Sie diese Validierung durchführen? Ich will nicht über das ganze Objekt gehen, ich bin auf der Suche nach etwas dynamischere

EDIT:

Dieses Objekt wird in einem Web Service-Eingang verwendet werden, um jede Setter Validierung nutzlos sein wird, auch ich weiß nicht, wie

Antwort

1

Es scheint, als ob das Objekt auf der Serverseite eines Webdienstes überprüft werden soll. Wenn ja, könnte die Antwort, die ich vorschlage, auf Ihre Situation zutreffen.

Wie Sie sicher schon gesehen haben, gibt es mehrere Möglichkeiten, die Felder in einem Objekt zu validieren. Aber Sie wissen, was zu tun ist: Überprüfen Sie jedes Feld, um zu sehen, ob der Wert gültig ist. Es gibt keine Magie hier: Sie überprüfen nur die Felder.

Wenn Sie Ihren Validierungscode an einem Ort aufbewahren möchten, können Sie ein XML-Schema erstellen, das Ihre Validierungslogik enthält, Ihre Klasse daraus generieren und die Objekte validieren, die Sie über den Draht erhalten Schema als Referenz. Dies macht es einfach, Ihren Validierungscode und Ihre Klasse zu pflegen: Sie aktualisieren einfach das Schema und generieren die Klasse neu. (Ich würde die Klasse nicht einmal in der Quellcodeverwaltung behalten. Erzeugen Sie sie einfach, bevor Sie Ihren Code kompilieren.Dies garantiert, dass Ihre Klasse immer mit Ihrem Schema synchronisiert ist.) Ich bin sicher, dass es dafür Bibliotheken in Java gibt (JAXB, vielleicht?), Aber ich habe seit Jahren nicht mit Java gearbeitet. Es ist eine sehr gemeinsame Sache in vielen Sprachen zu tun.

1

Ohne das genaue Szenario wird das System mit der zusätzlichen Abhängigkeit von jeder Annotation basierten System

im verhalten für eine individuelle Lösung sucht (ja, ich weiß, das Rad neu zu erfinden), kann ich Ihnen das Setter-Methoden des Objekts verwenden, empfehlen (Sie haben machen die Felder privat , richtig?), um jede Änderung der Werte zu bestätigen. die String-Setter können die Länge-Validierung Code aufrufen, können Sie das Datum Setter das Format-Validierung Code aufrufen, usw.

hoffe, das hilft,

Yuval = 8-)

+0

Dies muss ein POJO keine Logik im Inneren sein. thx für die Hilfe –

+0

POJO bedeutet keine Logik im Inneren. – CoverosGene

+0

@NunFur: Ich freue mich, Ihnen behilflich zu sein. vielleicht wolltest du 'bohne' sagen? = 8-) – Yuval

1
+0

thx für den Link, ich versuche, Annotation zu vermeiden, eine Lösung wäre oVal zu verwenden, aber ich suchte nach einer benutzerdefinierten Lösung. Ich bin nicht auf der Suche nach bestimmten Frameworks, sondern Lösungen, Algorithmen –

+0

Warum Vermeidung von Anmerkungen? – trunkc

+0

Dieses Objekt wird in Webservices verwendet, ich bin nicht sicher, wie es sich mit zusätzlichen Abhängigkeiten verhalten würde. Wie auch immer ich oben gesagt habe, war ich auf der Suche nach einer benutzerdefinierten Lösung. (Ja, ich weiß, das Rad neu erfinden) = D –

0

Vorschlagen, dass Sie Ihre Validierung zu tun, bevor sie auf das Objekt die Eigenschaften einstellen. Wenn Sie zum Beispiel eine int-Eigenschaft haben, die Sie von einer Zeichenkette analysieren, müssen Sie vor der Einstellung auf null, eine leere Zeichenkette, eine Zahl usw. achten. Sonst werden Sie sowieso auf Typprobleme stoßen. Und wenn Sie den fehlerhaften Wert einem Benutzer anzeigen möchten, müssen Sie die ursprüngliche Zeichenfolge beibehalten.

Wenn dies eine Webanwendung ist, gibt es viele Frameworks, die diesen Teil für Sie übernehmen und dann Ihr Objekt mit den bereits validierten und typsicheren Werten initialisieren. Struts oder Spring-MVC kommen mir in den Sinn, aber ich bin kein Webentwickler. Sie verwenden eine XML-Konfiguration, die Ihr Objekt und die zugehörige Validierung beschreibt und die Sie ebenfalls erweitern können. Wenn dies keine Web-Sache ist, können sie sich leicht in die Quere kommen, da sie die Fehler behandeln und Fehlerseiten direkt für Ihre Benutzer anzeigen möchten.

Für etwas etwas tiefer versuchen Sie Apache Commons Validator.

1

Die grundlegende Validierung für den Webservice wird auf der WSDL/XSD-Ebene durchgeführt.