Что такое шаблон HMVC?

«Это» - все о сфере видимости. Каждая функция имеет свою собственную область действия, и поскольку все в JS является объектом, даже функция может хранить некоторые значения в себе, используя «это». ООП 101 учит, что «это» применимо только к экземплярам объекта. Поэтому каждый раз, когда выполняет функция, новый «экземпляр» этой функции имеет новое значение «this».

Большинство людей путаются, когда пытаются использовать «это» внутри анонимных функций закрытия например:

(function(value) {
    this.value = value;
    $('.some-elements').each(function(elt){
        elt.innerHTML = this.value;        // uh oh!! possibly undefined
    });
})(2);

Итак, внутри each (), «this» не содержит «значение», которое вы ожидаете от него (от

this.value = value;
над ним). Итак, чтобы справиться с этой проблемой (без каламбуры), разработчик мог:

(function(value) {
    var self = this;            // small change
    self.value = value;
    $('.some-elements').each(function(elt){
        elt.innerHTML = self.value;        // phew!! == 2 
    });
})(2);

попробовать; вам понравится эта схема программирования

128
задан tereško 4 March 2014 в 06:18
поделиться

3 ответа

Сэм де Фрейссине (один из разработчиков Kohana) написал довольно подробную статью о HMVC , о том, что это такое и как его можно использовать.

Ссылка мертва: Новая ссылка - https://web.archive.org/web/20160214073806/http://techportal.inviqa.com/2010/02/22/scaling-web-applications-with -hmvc /

86
ответ дан 24 November 2019 в 00:33
поделиться

HMVC тесно связан с "компонентным" подходом к диспетчеризации. По сути, вместо одного диспетчера, который делегирует полномочия контроллеру, каждый контроллер может сам действовать как диспетчер. Это дает вам иерархию контроллеров. Дизайн более гибкий и обеспечивает лучшую инкапсуляцию кода, но за счет более высокой абстракции. Konstrukt разработан на основе этого шаблона.

См. Также этот ответ: https://stackoverflow.com/questions/115629/simplest-php-routing-framework/120411#120411

7
ответ дан 24 November 2019 в 00:33
поделиться

По крайней мере, в Kohana запрос HMVC - это HTTP-запрос, который обслуживается "изнутри": вместо того, чтобы передаваться по сети, он направляется, диспетчеризируется и обрабатывается самим фреймворком. Сходство названий "HMVC" и "MVC" сбивает с толку, так как предполагает связь между терминами, которой на самом деле нет: один не является незначительным вариантом или модификацией другого, это совершенно разные вещи. (HMVC также описывается как Ajax без HTTP-запроса на стороне клиента). Акцент Kohana на "HMVC" и его поддержка означает, что фреймворк имеет сильную поддержку сервис-ориентированной архитектуры на основе HTTP.

Преимущество этого архитектурного паттерна в том, что поскольку для внутренних и внешних запросов используется одна и та же "конвенция вызова", то при необходимости можно легко преобразовать "внутренние" сервисные запросы во "внешние" или наоборот.

Хотя это разумный архитектурный паттерн, давать ему собственное название кажется излишним (Symfony2 описывает ту же концепцию "sub-requests"), и на самом деле название кажется ошибочным: нет никаких особых требований или необходимости, чтобы запросы образовывали иерархию (кроме стандартного графа вызовов каждой императивной программы); запросы легко могут быть рекурсивными, например.

[Update Apr 2011, Mar 2012: Расширение ответа в ответ на комментарии.]

7
ответ дан 24 November 2019 в 00:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: