Показаны сообщения с ярлыком MVC. Показать все сообщения
Показаны сообщения с ярлыком MVC. Показать все сообщения

Разбиение на котроллеры

Что такое MVC


В последнее время я много общался об MVC (Model-View-Controller, «модель-представление-контроллер») с некоторым количеством программистов, занимающих позиции разного уровня в софтверных компаниях. Встретил много непонимания и теперь хочу поделиться соображениями по этому вопросу. MVC — штука очень абстрактная, и это основная причина недоразумения — недооценённая степень абстрактности. Она проявляется в следующем: программист, как правило, работает в рамках одной парадигмы (ООП наше всё) и смотрит на мир сквозь неё. И когда слышит, например, «контроллер» — представляет класс. А это частность — класс, или не класс, или совокупность объектов или процедур, это значения не имеет. Ещё бывает понимание искажено конкретным MVC-фреймворком. Попробую на это повлиять.

Гостевая книга на Laravel 5.1 - #2 Роутинг и контроллеры

Паттерны проектирования в схеме MVC в языке Smalltalk

В Smalltalk-80 для построения интерфейсов пользователя применяется тройка классов модель/вид/контроллер (Model/View/Controller - MVC).

MVC состоит из объектов трех видов:
  1. Модель - это объект приложения. 
  2. Вид - экранное представление. 
  3. Контроллер описывает, как интерфейс реагирует на управляющие воздействия пользователя.

МVC отделяет вид от модели, устанавливая между ними протокол взаимодействия «подписка/оповещение». Вид должен гарантировать, что внешнее представление отражает состояние модели. При каждом изменении внутренних данных модель оповещает все зависящие от нее виды, в результате чего вид обновляет себя. Такой подход позволяет присоединить к одной модели несколько видов, обеспечив тем самым различные представления. Можно создать новый вид, не переписывая модель.

На рисунке показана одна модель и три вида. (Для простоты мы опустили контроллеры.) Модель содержит некоторые данные, которые могут быть представлены в виде электронной таблицы, гистограммы и круговой диаграммы.