Les meilleures pratiques pour la validation des données d'entrée pour une application à plusieurs niveaux [fermé]

StackOverflow https://stackoverflow.com/questions/4848525

Question

Dans notre application, nous avons différentes couches. Couche de service, couche de DAO et d'actions (applications Struts).

données est transmis d'une couche à une autre couche.

Où nous devrions idéalement mettre la validation d'entrée?

Dis, userid, numéro de téléphone vient de l'interface utilisateur, ils sont obligatoires. Donc, nous faisons déjà à la validation côté client.

, Selon mon opinion, THTS tout u besoin. Nulle part il devrait être validé.

Mais un de mes collègues fait valoir, si les marques de client demande directement. Nous avons donc besoin d'ajouter dans les actions aussi.

Maintenant, à Dao et, même méthode est utilisée à obtenir une autre action et tht n'a pas la validation,

Ou, couche de service Say, il pourrait être exposé comme, par exemple en tant que service web, donc là aussi u shd avoir la validation.

Donc, essentiellement, il est suggesting..we SHD partout A des validations. Ce qui n'a pas de sens pour moi. Sa duplication à travers la couche.

Quelle est l'approche idéale pour cela? Dites la validation est peut-être simple vérification nul ou une validation complexe.

Était-ce utile?

La solution

D'accord avec Pangea, vous devriez vraiment avoir dans les points de terminaison de validation client et service.

Je voudrais ajouter que le concept de validation est d'être « fail-fast ». Vous ajoutez des validations à chaque couche afin que l'utilisateur ou l'appelant obtiendraient une rétroaction immédiate pour expliquer pourquoi l'appel échouait au lieu de commencer potentiellement une transaction, ce qui rend les requêtes complexes et de faire une écriture pour constater qu'un champ est trop court.

Sur le côté client, vous voulez autant que possible la validation afin que vous ne perdrez pas de temps de l'utilisateur, les ressources côté serveur et la bande passante (qui ont contentions dans de nombreux cas). Cependant, vous pouvez généralement pas faire toutes les validations du côté client (par exemple, pour vérifier s'il y a déjà un nom d'utilisateur utilisé sur inscription) afin que vous voulez que vérifié et un bon message d'erreur retourné dès que vous frapper la couche de service.

Sur la couche serveur, vous voulez supposer que toutes les entrées sont potentiellement dangereux et incorrect (et ils sont souvent reprises seront). Je pense effectivement qu'il vaut mieux être plus complet et agressif sur la validation des entrées sur la couche de service puisque c'est votre dernière ligne de défense. Si vous laissez une validation ou deux sur le côté client, vous avez juste besoin d'un mécanisme de traitement agréable faute de laisser les utilisateurs savent ce qui ne va pas. Si vous manquez quelque chose sur le côté service et les grèves catastrophe, cela pourrait signifier des heures ou des jours de débogage et d'essayer de restaurer des sauvegardes de base de données.

Il y a des contrôles qui sont effectués au niveau de la base de données ainsi que faire respecter des choses comme l'intégrité référentielle et tel. J'essaie généralement autant que possible de vérifier pour eux avant de tenter une écriture depuis l'interprétation des différents messages d'erreur de SGBDR et en essayant de les convertir à l'utilisateur Lingo compréhensible est souvent difficile, voire impossible.

Autres conseils

Si votre application fournit plusieurs points d'entrée (interface utilisateur ou système aux interfaces du système ou des systèmes de traitement par lots) alors vous devriez Cleanse (chèques nuls, les chèques de format, etc. requis-ness) vos données à tous ces bords et avant d'atteindre la couche de service. Mais cela ne signifie pas que vous devez répliquer votre logique de validation. Vous pouvez utiliser des cadres qui vous permettent de centraliser votre validation. Quelques exemples de cadres de validation peuvent être trouvés dans cette après .

Cependant, il y a des affaires qui validations doivent appartenir à votre couche de domaine et ils doivent rester dans votre couche de service de domaine ou objets domaine.

Je ne suis pas d'accord que vous devriez être effectuer la validation dans DAO de. OAC ce devrait juste être responsable des opérations CRUD. Si elles font plus que vous avez des couches qui fuient. Si vous avez à farcir des processus par lots, vous devez vous assurer que le lot vient à travers la couche de service afin que votre lot va aussi à travers les mêmes validations.

La seule pièce de la sagesse que je peux ajouter à la conversation, ne faites jamais confiance au client. Que votre client soit en HTML, Flash / Flex, ou autre chose, il y a une possibilité que quelqu'un va pirater et essayer de faire quelque chose que vous ne voulez pas qu'ils fassent. Le suivi ici est, s'il y a une possibilité que quelqu'un va pirater, nous les ingénieurs logiciels doivent supposer qu'il va se piraté, donc tout contrôle sur l'avant sont gentils, et peuvent aider dans votre facilité d'utilisation des applications , vous devez valider toutes vos entrées à l'extrémité arrière, même si cela conduit à dupliquer les contrôles.

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