Un simple modèle de conception à développer une petite Règle-Moteur
J'ai une exigence qui prennent beaucoup de règles validées par rapport à la java des objets de valeur et produit des résultats. (nous ne pouvons pas utiliser tout moteur de règles d'applications dans notre société, beaucoup de formalités et beaucoup de questions à poser).
Donc, plutôt que de mettre en œuvre les règles de fi dans du code java, j'ai suggéré de mettre en œuvre un petit moteur de règle, Simple et Extensible.
Conception de modèle à suivre?
J'ai ajouté ci-dessous un accidenté de la structure xml des règles définies.
<rule-set>
<name>Example1</name>
<description>Example rules defined</description>
<beans>
<bean class="com.example.Customer" alias="cust"/>
<bean class="com.example.Account" alias="acnt"/>
<bean class="com.example.Transaction" alias="trans"/>
</beans>
<rule name="CustomerInfo" description="This rule validates if all the customer values are present">
<if lhs="cust.getFirstName" rhs="null" operator="!="/>
<if lhs="cust.getLastName" rhs="null" operator="!=" logicaloperator="&&"/>
<if lhs="cust.getCountry" rhs="null" operator="!=" logicaloperator="||"/>
<if lhs="cust.getCity" rhs="null" operator="!=" logicaloperator="&&"/>
<if lhs="cust.getPhone" rhs="null" operator="!=" logicaloperator="&&"/>
<if lhs="cust.getEmail" rhs="null" operator="!=" logicaloperator="&&"/>
<then do="cust.completeFlag" arg1="true"/>
</rule>
<rule name="Transaction" description="Transfer the money from one ac to another">
<if lhs="trans.fromAccount" operator="!=" rhs="null"/>
<if lhs="trans.toAccount" operator="!=" rhs="null"/>
<if lhs="trans.fromAccount.balance" operator=">" rhs="trans.getTransaferAmount"/>
<then do="trans.fromAccount.debit" arg1="trans.getTransaferAmount"/>
<then do="trans.toAccount.credit" arg1="trans.getTransaferAmount"/>
</rule>
</rule-set>
OriginalL'auteur Vijay Veeraraghavan | 2010-11-25
Vous devez vous connecter pour publier un commentaire.
Cela dépend vraiment de la complexité des règles que vous essayez de mettre en œuvre. L'idée clé dans la programmation déclarative, c'est que les règles sont traitées comme des données. Donc, la façon la plus simple pour commencer est de voir si toutes vos règles peuvent être représentés comme des données dans une table. Par exemple, si vos règles sont du type si a=10, b = 7, alors vous pouvez représenter la même chose dans un tableau et d'écrire une méthode générique qui peut s'occuper de votre cas.
D'autre part, si vos règles permettent à plusieurs conditions (et/ou des clauses ainsi que les opérateurs de comparaison), d'une table de base de conception ne va pas aider.
Dans ce cas, vous devez spécifier la grammaire de vos règles, de générer un analyseur lexical et l'analyseur. L'analyseur permettrait d'analyser vos règles dans un arbre de syntaxe abstraite. Une fois que vous arrivez à ce stade, vous pouvez soit prendre l'arbre et de la cible à une règle existante de moteur ou de votre propre moteur de règles qui sait comment exécuter l'arbre.
OriginalL'auteur Sriram
Je recommanderais une Méthode De Fabrique De Modèle. Chaque règle est une Usine qui peuvent créer ces règles. Je ne puis résumer toutes ces Règle des Usines dans un Résumé De L'Usine.
Alternativement, vous pouvez créer une Règle de Moteur en tant que Constructeur (à l'aide d'un Le Générateur De Modèle) qui permet de passer des ensembles de règles et de construire une règle.
C'est ce que je fais de mieux, mais depuis que je ne connais pas les conditions exactes de votre moteur de règle que ce qui surgit dans l'esprit.
Peut-être un Modèle De Stratégie pourrait vous aider?
OriginalL'auteur Buhake Sindi
Pas exactement ce que vous avez demandé (c'est à dire le motif), mais peut-être que vous pouvez trouver les informations suivantes approche utile si vous souhaitez annuler votre propre:
http://mcqueeney.com/blog/creating-a-simple-rules-engine-using-the-java-scripting-api/
corrigé, merci.
OriginalL'auteur p.marino