Перейти к основному содержимому

Составные паттерны и MVC

Разработчику Архитектору

В продакшене паттерны редко живут по одному. Типичный UI-сценарий (пульт управления, симулятор, дашборд) одновременно использует Адаптер, Декоратор, Наблюдатель и Компоновщик. Частый архитектурный каркас таких систем — Model–View–Controller (MVC). Здесь — как разложить роли и не перепутать MVC с «тремя папками в репозитории».

Загрузка ArchiStyler…

MVC — три роли

РольОтветственностьЧто не должна делать
ModelДанные и бизнес-правила (BPM, плейлист, заказ)Рисовать UI и знать про кнопки
ViewОтображение состояния моделиМенять правила расчёта скидки
ControllerРеакция на ввод пользователя, вызов операций моделиХранить долгоживущее состояние домена

Поток запроса: пользователь действует во ViewController обновляет ModelModel уведомляет подписанные View → View перерисовывается.

В классическом примере с моделью ритма (BPM) модель хранит темп и список слушателей; представление (слайдеры, диаграмма) подписывается на изменения и не опрашивает модель в цикле — это прямое применение Наблюдателя / Наблюдателя в C#.


Какие паттерны GoF «сидят» внутри MVC

ПаттернРоль в MVCПример
ObserverModel → View: слабая связь, автоматическое обновление UIPropertyChangeListener, React state, SignalR push
StrategyПодключаемые алгоритмы внутри модели или контроллераРазные способы сортировки плейлиста, расчёта доставки
CommandДействие пользователя как объект (undo, очередь, макрос)Кнопка «Play» упаковывает вызов в команду с историей
CompositeДерево виджетов или менюПанель содержит слайдеры и кнопки как единый Component
DecoratorДополнительное оформление View без подклассовОбводка, тени, логирование отрисовки

MVC — архитектурный каркас; перечисленные шаблоны — тактические кирпичи внутри него. Обзор архитектурных стилей шире — в Архитектурных паттернах.


Составной сценарий — несколько паттернов сразу

Условный симулятор уток в одном модуле может сочетать:

  • утки с разным «кряканьем» — Стратегия;
  • подсчёт кряков — Декоратор вокруг Quackable;
  • индюк за «уткой» — Адаптер;
  • MVC для DJ-пульта — Model + View + Controller.

Урок для практики: один паттерн решает одну ось изменений. Если задача — только совместить API индюка и утки, достаточно Адаптера; если ещё нужен счётчик событий — добавляется Декоратор.


MVC в корпоративном веб-приложении

Классический Spring Boot / ASP.NET MVC — это MVC плюс слои:

Слой в проектеБлизкая роль MVCПаттерны рядом
Controller / APIControllerФасад над сервисами
ServiceModel (правила)Стратегия, Команда
RepositoryModel (доступ к данным)Фабрика, DI
DTO + View (JSON, Razor, SPA)ViewАдаптер к внешнему API

Практика в лаборатории — Spring Boot приложение: контроллер, сервис, репозиторий как разделение ответственности, а не как формальное «MVC ради MVC».

MVC и микросервисы

В распределённой системе «моделью» часто становится сервис домена, «представлением» — SPA или BFF, «контроллером» — API-шлюз или REST-слой. Идея та же: изменение бизнес-правил не должно тянуть переписывание всех экранов.


Чек-лист перед внедрением MVC

  • Есть ли несколько представлений одних и тех же данных (веб, мобильное, отчёт)?
  • Нужно ли обновлять UI при изменении модели без опроса?
  • Отделены ли тесты бизнес-логики от UI-фреймворка?

Если ответ «нет» на все три вопроса, достаточно тонкого API и одного клиента — полноценный MVC может быть избыточен.


См. также

См. также

Другие статьи этого же раздела в боковом меню (как на странице "О разделе").