1

OK, alors commençons par le début. Par exemple, je développe un gros projet. Ce n'est pas un secret pour nous tous que de tels projets contiennent beaucoup de logique commune. Supposons, par exemple, qu'une commande de boutique en ligne doive contenir certains articles et que la somme des prix de tous les articles soit exactement 1000. Donc, j'implémente cette logique dans l'application web MVC3 et je fais la validation sur commande. S'il y a des problèmes, il informera l'utilisateur des problèmes et lui demandera de republier le formulaire.Une bonne validation de la logique métier

Mais le projet a une autre partie importante. C'est DB. Ici, je peux également envelopper cette logique de validation dans une procédure stockée et ajouter des commandes uniquement à travers ce proc pour être sûr qu'il n'y a pas d'incohérence. (Ou devrais-je utiliser des contrôles sur la table pour être sûr?)

Voici le coincé que je cours. Il est nécessaire de dupliquer la logique à deux endroits pour obtenir l'intégrité des données. Bien sûr, je peux stocker la logique de validation uniquement du côté DB. Mais je doute qu'il va diminuer les performances de l'application.

Je suis sûr que les gars plus expérimentés ont une solution complète et élégante pour cette question. Alors, comment puis-je implémenter la logique uniquement à un endroit?

Répondre

2

Réponse simple, pas du goût de tout le monde

  • Votre base de données survivra à votre code client
  • Vous aurez plusieurs bases de code client pour la base de données
  • Il est habituel d'avoir une validation en plusieurs endroits: serait vous faites confiance à l'entrée de l'utilisateur depuis un navigateur et ignorez la validation côté serveur?
  • Définir "validation": règles métier complexes ou intégrité des données? Dans ce dernier cas, il devrait être le SGBDR » responsbility

Edit, au sujet de la dernière partie

pas tous la logique doit être mis en œuvre dans la base de données: seule logique qui sera commune à plusieurs bases de code client . Vous pouvez également canaliser ces demandes courantes via un niveau/service distinct qui traite de ces demandes.

Note, une logique métier est basé sur des agrégations ou des contrôles tableau croisé ou tout-table qui sont tout simplement mieux fait dans la base de données

+0

À propos de la quatrième raison. Je voulais seulement dire que la logique de validation, que vous ne pouvez pas implémenter en utilisant la fonctionnalité RDBMS comme les clés étrangères, les contraintes et ainsi de suite. Donc, en effet, il n'y a pas d'autre moyen que de changer de logique à deux endroits quand ça change? – kseen

+0

@kseen: pas d'une manière pratique (je suis sûr que vous pourriez avoir SQL appeler un service Web ou une telle absurdité). Cependant, je vais mettre à jour – gbn

+0

Je sais ce qu'il faut faire avec la logique ce qui est simple sur les tables croisées ou les vérifications d'agrégation. le sujet de la question est quoi faire avec la logique, qui diffère de mentionné ci-dessus. Donc, par exemple, est-il possible de vérifier que la somme des prix des articles de commande est égale à 1000? – kseen