Frage

Ich fühle mich ein wenig im Moment in Konflikt gerieten. Ich habe eine Web-Anwendung mit Streifen für ein MVC-Framework und Spring / Hibernate für die Back-End. Ich habe ein Konto Registrierungsverfahren in meiner MVC-Schicht, die die folgende Validierung erfordert:

  • Benutzername nicht bereits genommen
  • Die angegebene E-Mail-Adresse ist nicht bereits mit einem anderen Konto zugeordnet

habe ich eine Validierungsmethode in Streifen (MVC-Schicht), dass die Kontrollen diese beiden Fälle aber frage mich, ob meine Service-Layer diese Dublettenprüfung sollte? Wenn die Service-Layer-Schnittstelle als Web-Service ausgesetzt wurde dann denke ich, die Validierung eine gute Idee sei, aber wenn es nur im Rahmen einer Web-Anwendung verwendet werden ist es erforderlich?

Edit:. Ich bin nicht die Absicht, den Validierungscode zu duplizieren - ich die Validierung Methodenaufrufe an zwei Stellen bedeuten Duplizieren

Ich sehe meine Optionen wie:

  1. Duplizieren die Validierungs Anrufe sowohl in der MVC und Service-Layer
  2. Führen Sie nur diese Validierung in der MVC-Schicht
  3. Führen Sie nur diese Validierung in der Dienstschicht.

Was ist beste Praxis hier? Ich suche nach Beratung / Meinungen, welche Option ich gehen soll und warum.

Beachten Sie, dass es einfache Validierungsprüfungen auf den Eingabefeldern des Anmeldeformulars (wie für Rohlinge Kontrolle) und ich denke, diese sollten nur von der MVC Validierung behandelt werden; Ich bin nur über komplexere Validierungen betroffen.

War es hilfreich?

Lösung

Annie,

Gute Frage, ich habe mich auch gefragt, in vielen Gelegenheiten. Hier ist, was ich mit (bisher) endete.

Die reinste (aber langweilig) Ansatz ist es, die Validierungslogik in beiden Schichten aufzurufen. der pragmatische Ansatz nur invoke es in Web-Land sein könnte (zum Beispiel Ihrer Controller).

Ich denke, es gibt keine Antwort, die jede Diskussion beendet. Ich denke, dass es auf den Kontext des Projekts abhängt. Wenn das Projekt-Größe ist bescheiden (in Bezug auf die Menschen und die Größe der Code-Basis), und Sie sind sicher, dass nicht eine ganze Menge Code wird von anderen entwickelt werden, dass invoke Ihren Service API (in einem solchen Ausmaß, dass Sie nicht in der Lage sein wird, zu überwachen ), dann wird die Validierung in der Web-Schicht tut nur kann gut ausreichend.

Wenn Sie jedoch viele Kunden erwarten können Sie eine höheres Maß an Sicherheit benötigen. Als ich Sicherheit sagen, hier beziehe ich mich auf sie als das Niveau der Konsistenz-Garantien, dass Sie benötigen. Wenn das Niveau hoch ist, gibt es keinen Weg drum herum: Sie können sie tun müssen, sowohl im Service (für Sicherheit) und die Web-Schicht (meist in der Lage seiner Endanwendern mit einem akzeptablen Erlebnis bieten)

So ist der Schlüssel Fahrer hier Sicherheit ist und wie viel davon Sie wirklich brauchen. Wenn Sie eine Menge brauchen, gehen Sie für die ‚puristische‘ -Ansatz. Wenn Ihre Anwendung nicht genau Entscheidungen treffen, die Sorge um Leben und Tod, gehen Sie für den pragmatischen Ansatz.

Andere Tipps

Do not doppelte Code. Verwenden Sie JSR303 Bean Validation , so dass Sie von der gleichen Validierungslogik in allen Schichten verwenden können Ihre Anwendung.

Hibernate Validator (ein eigenständiges Projekt von dem Zeug Hibernate ORM) liefert die Referenz Implementierung dieser Schnittstelle. Es ist tot einfach zu bedienen, können Sie sehr schnell damit beginnen.

Meiner Meinung nach sollte man zwei Arten von Validierungen diferenciate:

  • Die Format-Datenvalidierung: Welche in der Präsentationsschicht (MVC in Ihrem Fall) validiert werden soll. Normalerweise sowohl in der Client- und der Server-Seite
  • Die Bussines Datenvalidierung: Welche in der Dienstschicht validiert werden soll

In Ihrem Fall sind Ihre Validierungen Geschäftsregeln im Zusammenhang, so dass ich sie nur in der Dienstschicht gelegt wird. Darüber hinaus, wenn Sie Ihre Validierungen in beiden Schichten dupliziert werden Sie zweimal die gleichen Abfragen sein machen, verlangsamen die Leistung Ihrer Anwendung.

  1. Idealerweise macht die Validierung in den beiden Schichten, da Ihre Service-Schicht mit einem anderen Client als die aktuelle mvc Schicht

  2. verwendet werden
  3. Wiederverwendung der Validierungsmechanismus an beiden Orten (Bean Validierung, zum Beispiel)

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