what's the right design pattern for complicate decision making system
I am working on the design of a decision making system that invokes complicate logic, potentially I will need to use a lot of nested if/else statements,
I want to see if is there a better design patter than can help me to simplify the stru开发者_StackOverflow社区cture of the system and provide a certain extensibility for future improvement.
The problem of the project can be simpified as:
We are now need to making a decision for a request, which has 3 type of properties, and potentially more. They are PricePolicy (Contract/WholeSale/Retail/Discount), RequestType (Buy/Sell) and ProductType (Fashion/Household/Toys).
Each decision making is based on all the 3 properties of the request, because the type of price policy may change in the future, and more properties will be added to the decision making process.
So I am trying to avoid the making a large switch statement, which is ugly and deficult for future extensions. Such as:
switch(ProductType) {
case Fashion:
switch(PricePolicy) {
case Contract:
if(Request == Buy) {
// making a decision.
} else {
}
}
}
}
Please share you idea and suggestions Thank you.
Cheers, Bob
Maybe you want a Rete rules engine. Try Drools.
Or a data-driven decision table.
If you want a class solution, think polymorphism. Replace all those if/then/else cases with classes like Strategy or Visitor.
The key is stable interfaces. If you can keep that stable, and change the implementations underneath, you've got it.
Use a n-dimensional array, and lookup/query/modify your decisions that way.
As ziplin suggested, I would consider a 3d array if there is a decision for each combination (ie. not a 'sparse' distribution of decisions - I think that's the correct term). This would require that you are able to encapsulate the decision logic in an expression which can be stored within the array. With a sparse distribution, an adjacency list could be used in a similar fashion.
精彩评论