Шаблон декомпозиции Model-View-Controller
Контроллер создаёт отображение, и говорит ему с какой моделью работать. Так же он обрабатывает все команды от пользователя, и управляет своими подопечными.

// Controller class Users_resource { GET() { return User.all.map( user_brief ) } } // View function user_brief( user: User ) { return { id: user.guid, name: user.passport.name_full, } } // Model class User { static all = [] as User[] guid: GUID passports: Passport[] resumes: Resume[] get passport() { return this.passports[0] } }
✅ Отображение может использовать произвольные модели с тем же интерфейсом.
✅ Легко добавлять новые отображения, не меняя модели. И наоборот.
❌ Для отображения разных типов моделей необходимо дублировать код отображения.
❌ Изменение интерфейса модели требует обновления всех использующих её отображений и контроллеров.
❌ Трёх слоёв слишком мало на больших масштабах.
