Иерархическая модель–представление–контроллер ( HMVC ) — это программный архитектурный шаблон , вариация модели–представления–контроллера (MVC), аналогичная презентации–абстракции–управлению (PAC), которая была опубликована в 2000 году в статье [1] в журнале JavaWorld Magazine. Авторы, по-видимому, не знали о PAC, который был опубликован 13 годами ранее. [2]
Контроллер имеет некоторую оплошность, поскольку он выбирает сначала модель, а затем представление, реализуя механизм одобрения контроллером. Модель не позволяет представлению получать прямой доступ к источнику данных.
Наибольшее практическое преимущество использования архитектуры HMVC — это «виджетизация» структур контента. [3] Примером могут служить комментарии, рейтинги, отображение RSS-каналов Twitter или блога или отображение содержимого корзины покупок для веб-сайта электронной коммерции. По сути, это часть контента, которая должна отображаться на нескольких страницах и, возможно, даже в разных местах, в зависимости от контекста основного HTTP-запроса.
Традиционные фреймворки MVC, как правило, не дают прямого ответа для этих типов структур контента, поэтому программисты часто в конечном итоге дублируют и переключают макеты, используют пользовательские помощники, создают свои собственные структуры виджетов или файлы библиотек или извлекают несвязанные данные из основного запрошенного контроллера, чтобы протолкнуть их в представление и отобразить в частичном виде. Недостатком является то, что ответственность за отрисовку определенной части контента или загрузку требуемых данных утекает в несколько областей и дублируется в соответствующих местах.
HMVC, или, в частности, возможность отправлять подзапросы Контроллеру для обработки этих обязанностей, направлена на решение этой проблемы. Структура имитирует структуру традиционного MVC. Например, если нужно загрузить некоторые данные о комментариях и отобразить их в формате HTML, можно отправить запрос Контроллеру комментариев с некоторыми параметрами. Затем запрос взаимодействует с Моделью, выбирает Представление, которое отображает содержимое. Отличие от традиционного MVC заключается в том, что вместо отображения комментариев на полностью отдельной странице они отображаются в строке под статьей, которую просматривает пользователь. В этом отношении HMVC стремится повысить модульность кода , способствовать повторному использованию и поддерживать лучшее разделение задач.