refactoring (clean code & change design)