[rules-users] Rule Reuse Best Practice

Wolfgang Laun wolfgang.laun at gmail.com
Wed Dec 16 03:22:39 EST 2009


To avoid changing the fact classes:

(a) Use an inline eval, calling a static method from a Java package. (This
might also contain a constant or method for the error message.)
(b) If you have more duplications of the same quality, look into the topic
Templates in the Expert documentation.

-W


2009/12/16 Jason Davidson <jljdavidson at gmail.com>

> Thanks for the reply.  I was hoping to avoid refactoring the fact objects.
>
> 2009/12/15 Edson Tirelli <ed.tirelli at gmail.com>
>
>>
>>    2 ways:
>>
>> 1. If you have a common superclass/interface for your objects and the
>> superclass/interface has the method to return your dln, just make use of
>> inheritance:
>>
>> when
>>     MyDTOInterface( dln not matches "^.{5,15}$")
>> then
>>    // do something
>>
>> 2. If you want to use composition instead, make dln a top level fact:
>>
>> when
>>    DLN( id not matches "^.{5,15}$")
>> then
>>    // do something
>>
>>    Edson
>>
>> 2009/12/15 Jason Davidson <jljdavidson at gmail.com>
>>
>>>  Hello,
>>>
>>> What is the best practice for reusing rules?  I've got a license number
>>> validation rule that I need to reuse for different fact types.  For example,
>>> the first rule uses the license number in a CitationDTO fact:
>>> rule "Citation DL Number"
>>>    ruleflow-group "CitationEntryValidationFlow"
>>>     when
>>>         CitationDTO($dln :
>>> citationSubject.driverLicense.driverAuthorizationId not matches "^.{5,15}$")
>>>     then
>>>         resultHolder.setMessage(GenericCitationFieldIds.DLN,"DLN [{0}]
>>> must be at least 5 characters long and no more than 15 characters long.",
>>> new Object[]{$dln});
>>> end
>>>
>>> Then I have another rule that uses the license number from the
>>> InCourtSearchDTO:
>>> rule "InCourt DL Number"
>>>     ruleflow-group "InCourtSearchValidationGroup"
>>>     when
>>>         InCourtSearchDTO( $d : dln not matches "^.{5,15}$")
>>>     then
>>>         resultHolder.setMessage(UserLogonFieldIds.END_DT,"DLN [{0}] must
>>> be at least 5 characters long and no more than 15 characters long.", new
>>> Object[]{$d});
>>> end
>>>
>>> Obviously this is a poor implementation because the license number check
>>> 'not matches "^.{5,15}$"' is duplicated.  Is there a way I can reuse this
>>> rule?
>>>
>>> Thanks!
>>>
>>> _______________________________________________
>>> rules-users mailing list
>>> rules-users at lists.jboss.org
>>> https://lists.jboss.org/mailman/listinfo/rules-users
>>>
>>>
>>
>>
>> --
>>  Edson Tirelli
>>  JBoss Drools Core Development
>>  JBoss by Red Hat @ www.jboss.com
>>
>> _______________________________________________
>> rules-users mailing list
>> rules-users at lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/rules-users
>>
>>
>
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20091216/5045198d/attachment.html 


More information about the rules-users mailing list