2008-09-02 5 views
3

In meiner previous question stimmten die meisten Kommentatoren überein, dass eine Validierungslogik sowohl bei Client & Serverseiten eine gute Sache ist.Validierungslogik zwischen Server- und Client-Seite synchron halten

Allerdings gibt es ein Problem - Sie müssen Ihre Validierungsregeln synchron zwischen Datenbank und Client-Code halten.

Die Frage ist also, wie können wir damit umgehen?

Ein Ansatz besteht darin, ORM-Techniken zu verwenden. Moderne ORM-Tools können Code erzeugen, der die Datenvalidierung vor dem Senden an den Server übernehmen kann.

Ich bin daran interessiert, Ihre Meinungen zu hören.
Haben Sie eine Art Standardprozess, um mit diesem Problem umzugehen? Oder denken Sie vielleicht, dass das überhaupt kein Problem ist? :)

EDIT:

Leute, erst einmal vielen Dank für Ihre Antworten.

Morgen werde ich Ihnen Antworten und Update Frage Text wie in this case

Antwort

3

Wie bereits erwähnt in einer der Antworten auf die anderen Post zusammenzufassen, wenn Sie Ihre Schichten getrennt sind, gehen zu halten, gibt es keine gute Möglichkeit, Vermeiden Sie das Duplizieren der Validierungslogik in jeder Schicht. Wenn Sie etwas verwenden, um sie automatisch zu verbinden, haben Sie eine Art Kopplung zwischen den Schichten eingeführt, die Sie möglicherweise behindern könnten. Dies könnte einer der Fälle sein, in denen Sie die Dinge nur manuell verfolgen müssen.

Wie auch immer Sie vorgehen, Sie müssen sicherstellen, dass jeder Layer seine eigene Validierung durchführt, weil Sie nie wissen, wie auf diesen Layer zugegriffen wird. Es gibt keine Garantie, dass alle von Ihnen implementierten Ebenen immer zusammen bleiben.

1

Ich verwende gerne einen Validierungsdienst, der sich nicht unbedingt um die Herkunft der zu validierenden Daten kümmert. Dies kann auf verschiedene Arten funktionieren, wenn Sie den Teil über das Übermitteln von Validierungsregeln an einen Client (d. H. Eine Webseite) aufrufen, aber ich denke, der wichtigste Aspekt dabei ist, eine einzige Autorität für die tatsächlichen Validierungsregeln zu haben. Wenn Sie eine Validierungslogik auf Ihren Datenkern-Entitäten haben, wie eine Sammlung von ValidationRule-Objekten, die über eine Validate-Methode überprüft werden - ein sehr typisches Szenario, dann würde ich dieselben Regeln für den Client bewerben (javascript), wenn Sie beispielsweise über eine Validierungslogik verfügen. über eine Transformation.

In der ASP.NET-Welt (die einzige, mit der ich sprechen kann) gibt es ein paar Möglichkeiten, dies zu tun. Meine bevorzugte Methode besteht darin, benutzerdefinierte Validatoren zu erstellen, die an Ihre UI-Widgets mit Feldern (und all ihren Validierungsregeln) für Ihre Entitäten binden. Der Vorteil besteht darin, dass all Ihre Validierungslogik in einem einzigen Validator gebündelt werden kann. Der Nachteil ist, dass Ihre Validierungsnachrichten dicht werden, da die Validierungsregeln alle gleichzeitig getestet werden. Dies kann natürlich gemildert werden, indem Ihre Validierungslogik nur eine Erwähnung des ersten Fehlers usw. zurückgibt.

Diese Antwort klingt wahrscheinlich irgendwie nebulös und unspezifisch, aber die zwei Punkte, die ich machen möchte, sind :

  1. Die Validierung sollte so nah wie möglich an den Punkten erfolgen, an denen Daten eingegeben und an denen sie festgeschrieben wurde.
  2. Die gleichen Validierungsregeln verwendet werden soll, wo die Validierung erfolgt - wenn die clientseitige Validierung geht, dann sollte es nie später Validierung fehlschlagen (Pre-Save-Geschäftsregeln, Fremdschlüsselverletzung usw.)
1

Einige Framework bietet eine Validierungsunterstützung, die Ihre Client- und Servervalidierung synchron halten kann. Werfen Sie einen Blick auf diese Seam validation tutorial mit Anmerkungen. Es ist eine gute Implementierung und sehr einfach zu verstehen.

Wie auch immer, wenn Sie sich nicht auf Frameworks verlassen wollen, ist es meiner Meinung nach einfach, etwas Ähnliches zu implementieren.

0

Wenn Sie ASP.Net verwenden, gibt es eine Reihe von Validierungssteuerelementen, die Sie verwenden können. Diese Steuerelemente sind sehr allgemein geschrieben, sodass die meisten von ihnen automatisch die Validierungslogik zwischen dem Client und dem Server duplizieren, obwohl Sie nur Optionen für das Steuerelement an einem Ort festlegen.

Sie können auch von ihnen erben, um zusätzliche domänenspezifische Validatoren zu erstellen, und es gibt Kontrollkästen von Drittanbietern im Internet, die Sie zu den Basissteuerelementen hinzufügen können.

Auch wenn Sie nicht mit ASP.Net arbeiten, sollten Sie einen Blick darauf werfen, wie das gemacht wird. Es wird Ihnen Ideen geben, wie Sie etwas Ähnliches in Ihrer eigenen Plattform tun können.

Verwandte Themen