Forgive me for what I suspect is an elementary question. That said, I did
not see it explained in newcomer-friendly language in the documentation, if
at all. And I'm a newcomer!
I'm working on a system for--among other things--pricing things. Drools
Expert is a great fit for this.
The system also has to do other things that have nothing to do with pricing
(let's say shipping, to keep it simple). There are places where Drools
Expert is a great fit for this as well.
In both cases, let's assume I might insert a given product into the engine,
turn the crank, and collect my results. But the kinds of results I'm
looking for--and the kinds of calculations I would expect to be
performed--are quite different in each case.
So, let's assume that--naively speaking here--when I insert the product and
{handwave handwave} I "know" I'm doing pricing work, then I only need
pricing-related rules to fire (I don't need the, say,
product-color-determining rules to fire, or the
can-the-product-be-shipped-to-Abu-Dhabi rules to fire, or the
how-many-people-liked-this-product rules to fire, etc.).
And when I insert the product and {handwave handwave} I "know" I'm
doing--whatever--shipping work, then I don't need the pricing rules to even
be considered.
I found this (
http://n3.nabble.com/Grouping-rules-td55531.html#a55531) as
perhaps one way of creating different sets of rules to be evaluated in
different contexts. This smelled very arcane to me for this purpose,
but...? perhaps it's the way to go?
Another is obviously to create *n* KnowledgeBases, each with its own set of
rules, where *n* is the number of contexts or activities or types of
activities that I'm performing. Then I'd look up the (pre-created)
KnowledgeBase
appropriate for the particular calculation I need performed. That seems
like solving the problem with a crowbar, a length of iron pipe and a
blowtorch. Ick.
Is there an accepted/preferred way to handle this sort of thing?
Agenda-groups seem...well, perhaps they'd work, but it seems awfully arcane
for something that I was hoping would be a little more end-user friendly.
Quoting the Expert manual:
When Should You Use A Rule Engine?
[...]
Domain experts often possess a wealth of knowledge about business rules and
processes. They typically are nontechnical, but can be very logical. Rules
can allow them to express the logic in their own terms. Of course, they
still have to think critically and be capable of logical thinking.
My domain users would almost certainly not think in terms of agenda groups.
Perhaps I could hide this in a DSL or something, but it seems to me there
must be some facility built into Drools for separating collections of rules
into channels, or groups, or partitions, or.... Is there?
Best,
Laird