What is the BEST way to design a system so that it may easily switch between multiple providers and add new providers as required, while keeping the complexity low?
What should be done when a class has a larger number of responsibilities, and consequently more operations and attributes, than the other classes in the domain?