2009-08-27 6 views
0

La plupart des codes (et la plupart des bogues) sont provoqués par des exceptions, par exemple: si un est coché, les champs de saisie 1, 5, 8 et 9 sont requis sinon si b est entrées alors les champs d'entrée 3, 4, 8 sont requis sinon si a est coché et b est coché alors les champs 1, 3 et 8 sont requisPlacer des exceptions dans le code ou dans les données

(ci-dessus est un exemple de code bogué puisque le code avec la dernière condition est jamais exécuté depuis le premier si un est vérifié sera exécuté, puis contourner la troisième condition .. juste un exemple de bugs potentiels)

Est-il préférable d'avoir des instructions if/switch comme ci-dessus dans le code OU pour créer une table d'exception où vous passeriez les conditions (sélectionnez * où a est cochée) et les valeurs de retour indiquent quels champs sont requis (ceci est un exemple simple) ...

Pour: plus facile à modifier logique en production (mise à jour de la base de données), simplification du code Inconvénients: tables et assoc. logique pour retourner les règles pourrait devenir confuse, performance hit pour aller à la base de données pour le traitement des règles ...

pensées? Quelqu'un at-il une expérience préalable de l'approche de la base de données?

+1

Vous voudrez peut-être examiner longuement les cadres de validation existants: http://www.google.com/search?q=validation+framework avant de réinventer la roue :-) – ChssPly76

Répondre

0

L'externalisation des règles à un «moteur» spécialisé peut être une approche raisonnable pour des raisons de facilité de maintenance. Il y a tout un marché pour les puissants moteurs de règles.

Cela reflète ce que je vois comme un résultat commun. Vous commencez avec quelques règles simples qui peuvent être facilement capturées dans une structure de données simple, mais le monde réel est gnarly. Vous trouvez que les cas spéciaux abondent et finissent par avoir besoin d'autant, ou plus, de complexité que vous aviez dans votre code. Cela ne veut pas dire que c'est une mauvaise chose d'externaliser, mais un espoir que, ce faisant, nous réduisons la complexité peut être trop optimiste - si l'entreprise est complexe, les règles ne seront pas prises en compte.

Cela conduit à un autre point, comment allez-vous gérer le cycle de vie des règles. Ils sont en production. L'entreprise veut les changer. De quel niveau de test aurez-vous besoin avant d'aller vivre? La très grande malléabilité des règles peut nous rendre moins prudents. Je pense que la logique externalisée est en quelque sorte toujours du code et a besoin d'autant de QA.

Questions connexes