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

Model-View-Controller

Теория

MVC - составной паттерн, состоящий из паттернов Наблюдатель, Стратегия, Компоновщик.

Модель использует паттерн Наблюдатель, чтобы наблюдатели оповещались об изменениях состояния, без формирования сильных связей.

Контроллер определяет стратегию для представления. Представление может использовать разные реализации контроллера для обеспечения разного поведения.

Представление использует паттерн Компоновщик для реализации пользовательского интерфейса, который обычно состоит из иерархии компонентов (панели, кнопки и т.д).

Совместная работа паттернов обеспечивает слабую связанность всех трех компонентов модели MVC, благодаря чему архитектура сохраняет гибкость и четкость.


Применимость в 1С

Модель (Model) - это объекты метаданных (документы, справочники и т.д.), а также бизнес-логика работы с данными (модули объектов метаданных, обработки, общие модули).

Представление (View) - это интерфейсные формы отвечающие за отображение данных пользователю.

Контроллер (Controller) - обычно это модуль формы, который связывает модель и представление. Контроллер получает входные данные с формы, передает их в модель для обработки, получает результаты и передает их в представление для вывода.

Применение MVC в 1С позволяет:

  • Отделить интерфейс от бизнес-логики
  • Изменять представление данных без изменения модели
  • Повторно использовать модель в разных частях системы с разными представлениями.
ПРИМЕЧАНИЕ:

Классическая архитектура MVC плохо применима к платформе 1С из-за специфики ее архитектуры.

Основные причины:

  1. В классическом MVC модель данных и бизнес-логика находятся на бэкенде (например, на сервере). В 1С же функциональность распределена между веб-клиентом и сервером приложений.
  2. Классический MVC предполагает, что контроллер генерирует HTML код на основе модели и представления. В 1С же визуальные компоненты формируются на стороне клиента.
  3. В классической архитектуре MVC взаимодействие идет по принципу "запрос-ответ". В 1С клиент подписывается на события и получает обновления от сервера в реальном времени.

Примеры