Question

Je me sens un peu en conflit pour le moment. J'ai une application Web en utilisant Stripes pour un framework MVC et Spring / Hibernate pour le back-end. J'ai une méthode d'enregistrement de compte dans ma couche MVC qui nécessite la validation suivante:

  • Nom d'utilisateur est pas déjà pris
  • L'adresse e-mail fournie n'est pas déjà associé à un autre compte

J'ai une méthode de validation dans Stripes (couche MVC) qui vérifie ces deux cas, mais se demandait si ma couche de service doit dupliquer ces contrôles? Si l'interface de couche de service a été exposé en tant que service web, alors je pense que la validation serait une bonne idée, mais si elle est utilisée que dans le cadre d'une application Web est-il nécessaire?

Edit:. Je ne suis pas l'intention de dupliquer le code de validation - je veux dire dupliquer les appels de méthode de validation en deux endroits

Je vois mes options:

  1. Dupliquer les appels de validation dans les deux MVC et couche de service
  2. Ne procédez à cette validation dans la couche MVC
  3. uniquement effectuer cette validation dans la couche de service.

Quelle est la meilleure pratique ici? Je cherche des conseils / avis sur quelle option je devrais aller et pourquoi.

Notez qu'il ya des vérifications de validation sur les champs de saisie du formulaire d'inscription (comme la vérification des blancs) et que je pense que ceux-ci doivent être traités par la validation MVC seulement; Je suis seulement préoccupé par les plus complexes de validation.

Était-ce utile?

La solution

Annie,

Bonne question, je me suis posé la même à plusieurs reprises. Voici ce que j'ai fini avec (jusqu'à présent).

Le plus pur (mais fastidieux) approche consiste à invoquer la logique de validation dans les deux couches. l'approche pragmatique pourrait être seulement l'invoquons en terre web (par exemple vos contrôleurs).

Je pense qu'il n'y a pas de réponse qui se termine toute discussion. Je pense que cela dépend du contexte de votre projet. Si le projet de taille est modeste (en termes de personnes et de la taille de base de code) et vous êtes sûr que pas beaucoup de code sera développé par d'autres qui font appel à votre API de service (dans une certaine mesure que vous ne serez pas en mesure de superviser ), puis en faisant la validation dans la couche Web ne peut bien suffire.

Cependant, si vous vous attendez beaucoup de clients vous pouvez avoir besoin d'une sécurité de niveau supérieur. Quand je dis la sécurité ici, je me réfère à ce que le niveau de consistance garantit que vous avez besoin. Si ce niveau est élevé, il n'y a pas moyen de contourner cela: vous devrez le faire à la fois le service (pour la sécurité) et la couche Web (la plupart du temps pour être en mesure de fournir aux utilisateurs finaux une expérience acceptable)

Ainsi, le facteur clé ici est la sécurité et combien il vous avez vraiment besoin. Si vous avez besoin beaucoup, vous allez à l'approche « puriste ». Si votre application ne fait pas exactement les décisions qui concernent les questions de la vie et la mort, vous allez à l'approche pragmatique.

Autres conseils

Ne pas dupliquer le code. Utilisez JSR303 Bean Validation afin que vous puissiez utiliser la même logique de validation dans toutes les couches de votre application.

Hibernate Validator (un projet distinct de la substance Hibernate ORM) fournit la référence la mise en œuvre de cette interface. Il est mort simple à utiliser, vous pouvez commencer avec très rapidement .

À mon avis, vous devriez diferenciate deux types de validations:

  • La validation des données Format: Ce qui devrait être validée dans la couche de présentation (MVC dans votre cas). Normalement, les deux dans le client et le côté serveur
  • La validation des données Bussines: qui devrait être validée dans la couche de service

Dans votre cas validateurs sont liés aux règles métier, donc je vais les mettre seulement dans la couche de service. De plus, si vous dupliquez validateurs dans les deux couches que vous allez faire deux fois les mêmes requêtes, ce qui ralentit les performances de votre application.

  1. Idéalement, faire la validation dans les deux couches, puisque votre couche de service peut être utilisé avec un client autre que la couche actuelle mvc

  2. La réutilisation du mécanisme de validation à deux endroits (validation Bean, par exemple)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top