Well, something that might be helpful for you is doing Refactor:
Refactoring is a disciplined technique for restructuring an existing
body of code, altering its internal structure without changing its
external behavior. Its heart is a series of small behavior preserving
transformations. Each transformation (called a 'refactoring') does
little, but a sequence of transformations can produce a significant
restructuring. Since each refactoring is small, it's less likely to go
wrong. The system is also kept fully working after each small
refactoring, reducing the chances that a system can get seriously
broken during the restructuring.
There is a book about it.
Anyway. I was in the same situation and I have to do a lot of refactor, like:
Simplifying blocks of if statements in methods doing "Decompose Conditional"
Decompose Conditional You have a complicated conditional (if-then-else) statement. Extract methods from the condition, then part, and else parts.
if (date.before (SUMMER_START) | | date.after( SUMMER_END))
charge = quantity * _winterRate + _winterServiceCharge;
charge = quantity * _summerRate;
if (notSummer( date))
charge = winterCharge( quantity);
charge = summerCharge (quantity);
Consolidating conditional expressions in a single method. For example, if I have a bunch of ifs in a method before doing the real job, then I group all those ifs in one single method
Once that you have done some refactor of your code, you realize that is easy move the pices together so at that point I would suggest the Strategy pattern.
In computer programming, the strategy pattern (also known as the
policy pattern) is a software design pattern, whereby an algorithm's
behaviour can be selected at runtime. http://en.wikipedia.org/wiki/Strategy_pattern
and finally, remove switch statements (if you have them) with some polymorhism.