https://www.deepcrazyworld.com/model-view-controller-pattern/