design refactoring