https://medium.com/javarevisited/code-refactoring-in-java-tips-best-practices-techniques-c240fb334925