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

// Presenter class User_preview { user: User card = new Card({ image: ()=> this.user.avatar, message: ()=> this.user.nickname, color: ()=> this.user.skin.color, click: ()=> this.skin_change(), }) skin_change() { this.user.skin = Skin.random() } } // View <div class="Card" onclick={click} style={{ background: color }}> <img src={ image } /> <p>{ message }</p> </div> // Model class User extends Model { avatar: string nickname: string skin: Skin }
✅ Легко добавлять новые отображения, не меняя модели. И наоборот.
✅ Изменение интерфесов модели или отображения требует изменения только лишь презентеров.
❌ Трёх слоёв слишком мало на больших масштабах.
❌ Для использования состояния одного презентера из другого необходимо искусственное вынесение его в модели.
