50 examples of refactoring design