Frage

Wo sehen Sie Benutzereingabevalidierung in einer Web-Formular Anwendung setzen?

  1. Ansicht: JavaScript Client-Seite
  2. Controller: Server-Seite Sprache (C # ...)
  3. Modell: Datenbank (gespeicherte Prozeduren oder Abhängigkeiten)

Ich denke, es Validierung durch jede Ebene erforderlich ist:

  1. Haben die Benutzereingabe einen vernünftigen Wert
    • sind Termine aktuelle Termine, Zahlen actualy Zahlen ...
  2. Sie alle Prüfungen in 1 wieder und Kontrollen für böswillige Angriffe (IE XSS oder SQL-Injection)
    • Die getan Kontrollen in 1 sind in erster Linie eine Server-Rundfahrt zu vermeiden, wenn der Benutzer einen Fehler macht.
    • Da sie auf der Client-Seite in Javascript fertig sind, können Sie nicht darauf vertrauen, dass sie laufen gelassen wurden. Validieren wieder diese Werte werden einige böswillige Angriffe stoppen.
  3. Sind Abhängigkeiten erfüllt (dh. Haben die Nutzer einen Kommentar zu einer gültigen Frage hinzufügen)
    • Eine gute Schnittstelle macht diese sehr schwer zu verletzen. Wenn hier etwas gefangen, ging etwas sehr falsch.

[inspiriert von diese Antwort ]

War es hilfreich?

Lösung

ich überprüfen, in allen Ebenen, aber ich möchte eine Validierung Trick beachten, die ich benutze.

ich in der Datenbank-Ebene zu validieren, werden geeignete Einschränkungen für Ihre Modellvalidierung automatischer Datenintegrität bieten.

Dies ist eine Kunst, die auf den meisten Web-Programmierer zu verlieren scheint.

Andere Tipps

Die Validierung des Modells, optional automatisierte Routinen in der Benutzeroberfläche, die ihre Hinweise aus dem Modell nehmen und die Benutzerfreundlichkeit verbessern.

Durch die automatisierten Routinen meine ich, dass es nicht Validierungscode sollte jeder pro-Modell in der Benutzeroberfläche. Wenn Sie eine Bibliothek von Validierungsmethoden haben, wie RoR ist (die Methoden wie validates_presence_of hat: Benutzername). Die Steuerung oder Ansicht sollte diese und gelten gleichwertig Javascript fähig sein (oder was auch immer ist praktisch) Methoden zu lesen

Das bedeutet, dass Sie die vollständige Validierung Bibliothek im ui duplizieren, oder zumindest eine Zuordnung zur Verfügung stellen, wenn Sie einen bereits existierenden einen verwenden. Aber sobald das erledigt ist Sie keine Validierungslogik außerhalb des Modells zu schreiben.

Die Validierung kann auf allen Ebenen durchgeführt werden.

Validieren der Eingabe von einem Web-Formular (alle Strings, um die ordnungsgemäße Arten Gießen usw.) unterscheidet sich von der Eingabe von einem Webservice Validierung oder XML-Datei, usw. Jeder seine eigenen speziellen Fällen hat. Sie können eine Validator Hilfsklasse natürlich erstellen, damit die Validierung Externalisierung und ermöglicht es durch Ansichten geteilt werden.

Dann haben Sie die DAO-Schicht Validierung - gibt es genug Daten im Modell zu beharren (trifft nicht null Zwänge, usw.) und so weiter. Sie können sogar Check-Einschränkungen in der Datenbank (ist Status in ( 'N', 'A', 'S', 'D'), etc.) haben.

Das ist interessant. Für die längste Zeit führte ich alle Validierung im Modell, rechts oben, was ich halte DAL (Datenzugriffsschicht). Meine Modelle sind die Abstraktion und Low-Level-API typischerweise pattern'ed nach Tabellendaten-Gateway mit einem DAL bereitstellt.

In der Seite des TDG Ich würde die Business-Logik und Validierungen implementieren, wie zum Beispiel:

  1. Sie Benutzername leer
  2. Sie Benutzername> 30 Zeichen
  3. Wenn Datensatz nicht vorhanden ist, Rückkehr Fehler

Als meine Anwendung in Komplexität wuchs begann ich zu begreifen, dass ein großer Teil der Validierung auf der Clientseite getan werden könnte, mit Hilfe von JavaScript. Also habe ich den größten Teil der Validierungslogik in JS Refactoring und cleanuped auf meine Modelle.

Dann erkannte ich, dass die serverseitige Validierung (nicht Filterung / Flucht - was ich anders betrachten). Sollte via Modem in dem Server, auf dem Kuchen so gut und nur Client-Seite als Sahnehäubchen erfolgen

So ist die Validierungslogik zurück ging, wenn ich wieder bewusst worden, dass es wahrscheinlich ein deutlicher Unterschied zwischen der Eingabevalidierung / Behauptung und Geschäftsregeln / Logik war.

Im Grunde genommen, wenn es in der Client-Seite der Anwendung durchgeführt werden kann (unter Verwendung von JS) Ich halte diese Gültigkeitsprüfung ... wenn es durch das Modell getan werden muss (nicht dieser Datensatz bereits vorhanden ist, etc?), Dann ich würde diese Geschäftslogik betrachten. Was verwirrend ist, dass sie beide protecte die Integrität des Datenmodells.

Wenn Sie nicht‘die Länge eines Benutzernamens bestätigen dann was die Menschen davon abzuhalten, ein einzelnes Zeichen Benutzernamen erstellen?

Ich habe immer noch nicht ganz entschieden, wo neben dieser Logik zu setzen, ich denke, es hängt wirklich davon ab, was man mehr, dünne Controller, schwere Modelle, oder umgekehrt ...

favorisieren

Controller in meinem Fall ist in der Regel weit mehr Anwendung centric sein, während Modelle gefertigt, wenn sie sorgfältig kann ich oft in „anderen“ Projekten wiederverwenden nicht nur intern, so dass ich liebe Modelle geringes Gewicht und Regler auf der schwereren Seite zu halten.

Was Kräfte fahren Sie in beiden Richtungen sind wirklich persönliche Meinung, Anforderungen, Erfahrungen, etc ...

Interessantes Thema:)

Validierung muss in der Steuerung durchgeführt werden. - es ist der einzige Ort, die Sicherheit und die Reaktion gewährleistet

Validierung sollte in der Ansicht durchgeführt werden. - es Ansprechstelle ist und die beste UE und Ihren Server zusätzliche Arbeit speichern

Validierung wird auf dem Modell durchgeführt werden - aber nur für einen bestimmten Kern Niveau der Kontrollen. Datenbanken sollte immer angemessen Zwänge widerspiegelt, aber es ist ineffizient diese stehen für echte Validierung zu lassen, noch ist es immer möglich, dass eine Datenbank gültige Eingabe mit einfachen Einschränkungen zu bestimmen.

Alle Validierung sollte mindestens einmal geschehen, und dies in der mittleren Ebene sein sollte, ob es in Ihrem Wertobjekte sein (im Sinne DDD, nicht mit DTO verwechselt werden), oder durch das Business-Objekt des Unternehmens selbst. Client-seitige Validierung kann auftreten, Benutzerfreundlichkeit zu verbessern. Ich neige dazu, keine Client-seitige Validierung zu tun, weil ich nur all die Dinge, aussetzen kann, die sofort auf dem Formular falsch sind, aber das ist nur meine persönliche Präferenz Die Datenbank Validierung auftreten kann, um Datenintegrität im Fall versichern Sie die Logik vermasselten in die mittlere Schicht oder zurück endete etwas.

Ich mache es nur in der View und Controller, die Datenbank einige, dass erzwingt, indem Sie Ihre Datentypen und so weiter, aber ich würde lieber bekommt es nicht so weit, ohne dass ich einen Fehler kontrollieren.

Sie ziemlich obwohl Ihre eigene Frage beantworten, ist die wichtige Sache zu wissen, dass Sie nie der Ansicht vertrauen können, obwohl dies der einfachste Weg Feedback an den Benutzer zu geben ist, so müssen Sie mindestens eine weitere Ebene sanieren auf.

Hmmmm, nicht sicher. Ich würde den Controller hat gesagt, bis ich diesen Artikel gelesen Re: Skinny Controller, Fett Modelle

http://blog.astrumfutura.com/archives/373-The-M-in-MVC-Why-Models-are-Misunderstood-and-Unappreciated.html

Da die meisten von Validierungen hängt von Geschäftsregeln , ich tun, um die Validierung auf die Business-Schicht als Drittanbieter-Tool-Klassen. Es gibt auch andere Arten von Validierungen, wie Benutzereingaben, während es in der Steuerung vorgenommen werden muss, aber Sie können auch diese Validierungsregeln in Dritten Klassen kapseln. Wirklich, es hängt davon ab, was zu überprüfen.

Die Client-Seite Validierungen die Unmündigen sind, machte nur ein leichter zu bauen Eingabevalidierung , aber die Server-seitige Validierung ist immer erforderlich . Sie können nie in der Benutzereingabe vertrauen;)

.NET schöner Kontrollen haben Validierungen zu bauen, aber die Business-Schicht muss immer einen besseren Ansatz, um die Daten zu überprüfen und diese Kontrollen sind zu dieser Aufgabe nicht genug.

Einfache Eingabevalidierung in der Ansicht. Vollständige Validierung im Modell. Grund? Wenn Sie die Ansicht Technologie ändern, und die Validierung ist in der Ansicht / Controller haben Sie die Validierung für die neue Ansicht neu zu schreiben. Dies kann Fehler einführen. Legen Sie es in dem Modell, und dies wird von allen Ansichten wiederverwendet ...

Aber, wie gesagt, einfache Validierung in der Ansicht für die Geschwindigkeit und Leichtigkeit.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top