General
There are three main types of classes in the game.
Controllers - handle behavior, change position, set state, etc.
They get data and objects from providers and change the object’s values depending on the received data.
Providers - they provide data or objects to controllers;
View - classes for UI, and for everything we can see on a screen. They often inherited from MonoBehavior.
GameContext - simple implementation of service locator pattern
Overview: we can register and get objects in any place where we want.
Validate attribute -custom attribute, which is used to check any UnityObjects implemented in a certain interface.