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.