https://medium.com/@reza.mahmoudi.mehran/overview-of-the-grasp-patterns-and-how-they-can-be-applied-in-kotlin-b2e0f4c822be