https://betterprogramming.pub/an-analysis-of-refactoring-techniques-to-improve-your-source-code-c9ded9eb2ff6