Question

J'ai une liste assez décente des avantages de l'utilisation d'un moteur de règles, ainsi que des raisons de les utiliser, ce que je dois une liste des raisons pour lesquelles vous ne devriez pas utiliser un moteur Règles

Le mieux que j'ai à ce jour est la suivante:

  

Règles moteurs ne sont pas vraiment destinés à gérer workflow ou processus   les exécutions ne sont moteurs de workflow ou des outils de gestion des processus   conçu pour faire des règles.

Les autres grandes raisons pour lesquelles vous ne devriez pas les utiliser?

Était-ce utile?

La solution

Je suis très nerveux quand je vois des gens qui utilisent des ensembles de règles très grandes (par exemple, de l'ordre de milliers de règles dans un ensemble unique de règles). Cela se produit souvent lorsque le moteur de règles est un singleton assis au centre de l'entreprise dans l'espoir que le maintien des règles DRY seront les rendre accessibles à de nombreuses applications qui en ont besoin. Je défie quiconque de me dire qu'un moteur de règles Rete avec autant de règles est bien compris. Je ne suis pas au courant des outils qui peuvent vérifier que les conflits n'existent pas.

Je pense que le partitionnement des règles définit pour les garder petits est une meilleure option. Les aspects peuvent être un moyen de partager une règle commune définie entre de nombreux objets.

Je préfère un plus simple, plus de données approche axée sur la mesure du possible.

Autres conseils

Je vais donner 2 exemples de l'expérience personnelle où l'aide d'un moteur de règles est une mauvaise idée, peut-être cela aidera à: -

  1. Sur un projet passé, je remarque que les fichiers de règles (le projet) utilisé Drools contenaient beaucoup de code Java, y compris des boucles, des fonctions, etc. Ils étaient essentiellement des fichiers Java se faisant passer fichier de règles. Quand j'ai demandé à l'architecte sur son raisonnement pour la conception, on m'a dit que les « règles ont jamais été destinés à être maintenus par les utilisateurs professionnels ».

Leçon :. Ils sont appelés « règles métier » pour une raison, ne pas utiliser des règles lorsque vous ne pouvez pas concevoir un système qui peut être facilement mis à jour / compris par les utilisateurs d'affaires

  1. Un autre cas; Le projet des règles utilisées parce que les exigences ont été mal définies / comprises et souvent modifiés. La solution de l'équipe de développement a été d'utiliser des règles largement pour éviter de code Déploie fréquents.

Leçon : Exigences ont tendance à changer beaucoup pendant les changements de version initiale et ne justifient pas l'utilisation de règles. Utiliser des règles lorsque votre entreprise change souvent (pas les exigences). Par exemple: - Un logiciel qui fait vos impôts changera chaque année que les lois fiscales changent et l'utilisation des règles est une excellente idée. Version 1.0 d'une application Web changera souvent les utilisateurs à identifier de nouvelles exigences, mais se stabiliser au fil du temps. Ne pas utiliser des règles comme une alternative à deploy code.

Je suis un grand fan des moteurs de règles métier, car il peut vous aider à rendre votre vie beaucoup plus facile en tant que programmeur. L'une des premières expériences que j'ai eu tout en travaillant sur un projet d'entrepôt de données était de trouver des procédures stockées contenant des structures complexes CAS étendant sur des pages entières. Ce fut un cauchemar de débogage, car il était très difficile de comprendre la logique appliquée dans de telles structures longues de cas et de déterminer si vous avez un chevauchement entre une règle à la page 1 du code et un autre de la page 5. Dans l'ensemble, nous avons eu plus de 300 ces règles intégrées dans le code.

Quand nous avons reçu une nouvelle exigence de développement, pour quelque chose appelé Destination comptable, qui a été le traitement impliquant plus de 3000 règles, je savais que quelque chose devait changer. À l'époque, je travaille sur un prototype qui deviendra plus tard le parent de ce qui est maintenant un moteur de règles métier sur mesure, capable de traiter tous les opérateurs de la norme SQL. Dans un premier temps, nous avons utilisé Excel comme outil de création et, plus tard, nous avons créé une application ASP.net qui permettra aux utilisateurs professionnels de définir leurs propres règles métier, sans avoir besoin d'écrire du code. Maintenant, le système fonctionne très bien, avec des bugs très peu, et contient plus de 7000 règles pour le calcul de cette destination comptable. Je ne pense pas que ce scénario aurait été possible par tout coder en dur. Et les utilisateurs sont assez heureux qu'ils peuvent définir leurs propres règles sans que cela devienne leur goulot d'étranglement.

Pourtant, il y a des limites à cette approche:

  • Vous devez avoir capables les utilisateurs professionnels qui ont une excellente compréhension de l'entreprise de l'entreprise.
  • Il y a une charge de travail importante sur la recherche du système entier (en notre cas un entrepôt de données), afin de déterminer tout codé en dur des conditions qui ont du sens pour traduire en règles à traiter par une règle de gestion du moteur. Nous avons eu aussi de prendre soin que ces modèles initiaux soient tout à fait compréhensible par les utilisateurs commerciaux.
  • Vous devez avoir une application utilisée pour la création de règles, dans lequel algorithmes pour la détection des règles commerciales qui se chevauchent est mis en œuvre. Sinon, vous vous retrouverez avec un grand désordre, où personne ne comprend plus les résultats qu'ils obtiennent. Lorsque vous avez un bug dans un composant générique comme un moteur de règles métier sur mesure, il peut être très difficile à déboguer et impliquent de nombreux tests pour vous assurer que les choses qui ont travaillé avant le travail désormais.

Plus de détails sur ce sujet se trouvent sur un poste que j'ai écrit: http://dwhbp.com/post/2011/10/30/Implementing-a-Business-Rule-Engine.aspx

Dans l'ensemble, le plus grand avantage d'utiliser un des moteurs de règles métier est qu'il permet aux utilisateurs de reprendre le contrôle sur les définitions de règles métier et la création, sans qu'il soit nécessaire d'aller au service informatique à chaque fois qu'ils ont besoin de modifier quelque chose. Elle a également réduit la charge de travail sur l'informatique des équipes de développement, qui peuvent désormais se concentrer sur la construction des choses avec plus de valeur ajoutée.

Cheers,

Nicolae

L'un poit je l'ai remarqué à être « l'épée à double tranchant » est:

  

placer la logique dans les mains du personnel non technique

Je l'ai vu ce grand travail, quand vous avez un ou deux génies multidisciplinaires du côté non technique, mais je l'ai vu aussi le manque de technicity conduisant à enfler, plus de bugs, et en général le développement 4x / entretien coût.

Ainsi, vous devez considérer votre base d'utilisateurs au sérieux.

Je pensais que l'article d'Alex Papadimoulis était assez perspicace: http://thedailywtf.com/articles/soft_coding.aspx

Il est pas exhaustif, mais il a quelques bons points.

grand article quand ne pas utiliser un moteur de règles ... (ainsi que quand utiliser un) ....

http://www.jessrules.com/guidelines.shtml

Une autre option est si vous avez un ensemble linéaire de règles applicables une seule fois dans un ordre quelconque pour obtenir un résultat est de créer une interface groovy et ont les développeurs d'écrire et de déployer ces nouvelles règles. L'avantage est qu'il est méchamment rapide parce que normalement vous passer la session de mise en veille prolongée ou une session de jdbc ainsi que tous les paramètres que vous avez accès à toutes vos applications de données, mais d'une manière efficace. Avec une liste de fait, il peut y avoir beaucoup de boucle / correspondance qui peut vraiment ralentir le système ..... Il est une autre façon d'éviter un moteur de règles et être en mesure d'être déployée de façon dynamique (oui, nos règles groovy ont été déployés dans un base de données et nous avons eu pas récursion .... non plus rencontré la règle ou il n'a pas). Il est juste une autre option ..... oh et un avantage supplémentaire ne sont pas des règles d'apprendre la syntaxe pour les développeurs entrants. Ils doivent apprendre un peu groovy, mais qui est très proche de Java de sorte que la courbe d'apprentissage est beaucoup mieux.

Cela dépend vraiment de votre contexte. Moteur de règles ont leur place et est au-dessus juste une autre option si vous avez des règles sur un projet que vous pouvez déployer dynamiquement des situations très simplifiées qui ne nécessitent pas un moteur de règles.

FONDAMENTALEMENT ne PAS utiliser un moteur de règles si vous avez simple et peut avoir ruleset une interface groovy à la place ..... tout comme les développeurs dynamiquement déployables et nouveaux se joignent à votre équipe peuvent apprendre plus vite que la langue de bave. (Mais c'est mon avis)

Dans mon expérience, les règles moteurs fonctionnent mieux lorsque les conditions suivantes sont remplies:

  1. doctrine bien définie pour votre domaine de problème
  2. de haute qualité des données (de préférence automatisée) pour aider à conduire la plupart de vos entrées
  3. L'accès aux experts en la matière
  4. Les développeurs de logiciels avec expérience dans la création de systèmes experts

Si l'un de ces quatre traits manquent, vous pouvez toujours trouver un moteur de règles fonctionne pour vous, mais chaque fois que je l'ai essayé avec encore 1 manque, je rencontriez des difficultés.

C'est certainement un bon début. L'autre chose avec des moteurs de règles est que certaines choses sont bien compris, déterministe et simple. la retenue de la paie est (ou utiliser pour être) comme ça. Vous pourrait exprimer des règles qui seraient résolus par un moteur de règles, mais vous pouvez exprimer les mêmes règles que d'une table assez simple des valeurs.

Ainsi, les moteurs de workflow sont bons quand vous exprimez un processus à long terme qui aura des données persistantes. Moteurs de règles peuvent faire la même chose, mais vous devez faire beaucoup de complexité supplémentaire.

moteurs de règles sont bonnes quand vous avez compliqué bases de connaissances et ont besoin d'une recherche. Moteurs de règles peuvent résoudre des problèmes complexes, et peuvent être adaptés rapidement à des situations changeantes, mais imposer beaucoup de complexité sur la mise en œuvre de base.

sont simples assez nombreux algorithmes de décision d'exprimer comme un simple programme déterminés par des tables sans la complexité implicite par un véritable moteur de règles.

Je recommande fortement les règles d'affaires comme moteurs Drools comme open source ou Règles de commerce moteur telles que LiveRules

  • Lorsque vous avez beaucoup de politiques commerciales qui sont volatils dans la nature, il est très difficile de maintenir cette partie du code de la technologie de base.
  • Le moteur de règles offre une grande flexibilité du cadre et facile à changer et à déployer.
  • moteurs règles ne doivent pas être utilisés partout, mais ils doivent utiliser lorsque vous avez beaucoup de politiques où des changements sont inévitables sur une base régulière.

Je ne comprends pas vraiment certains points tels que:
a) les gens d'affaires doit comprendre très bien les entreprises, ou;
b) le désaccord sur les gens d'affaires ne ont pas besoin de connaître la règle.

Pour moi, en tant que peuple juste toucher BRE, au profit de BRE est appelé ainsi laisser système adapter aux changements d'affaires, d'où il est concentré sur adaptation du changement.
T-il si la règle mise en place au moment x est différent de la règle mise en place au moment y en raison de:
a) les gens d'affaires ne comprennent pas les entreprises, ou;
b) les gens d'affaires ne comprennent pas les règles?

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