HMVC и HTML-компоненты
Я прочитал несколько статей о HMVC, на PHP и других языках, и во всех них реализация этого шаблона заключалась в том, чтобы иметь "главный контроллер", запрашивающий тело ответа одного или нескольких ресурсов, внутренних или внешних, с использованием cURL или Потоковые контексты, для создания своих собственных, непосредственно через объект Response или через пользовательский View Engine, назначая переменные шаблона с полученным HTML.
Тем не менее, все эти статьи так сильно цеплялись за техническую концепцию, что в большинстве случаев они не затрагивали все важные моменты. Таким образом, я пришел к выводу, что основная концепция HMVC - это, вообще говоря, MVC внутри MVC, работающая как иерархически, так и изолированно, всегда одинаково.
Но как именно произойдет HTML-составляющая этого "Master-Controller", если для того, чтобы каждая подсистема работала одинаково во всех отношениях, потребовались бы возможные сценарии, таблицы стилей или даже дополнительная разметка?
С примером становится легче понять:
Рассматривая приложение, разработанное с помощью Bootstrap 3, состоящего из N компонентов, все они также были разработаны с использованием одной и той же среды (поэтому они работают изолированно точно так же, как и в случае основного приложения), с HMVC, образно созданным с использованием псевдокода ниже.:
// Make the Requests
$projects = new Request( 'management/projects', 'GET' );
$clients = new Request( 'management/clients', 'GET' );
// Creates the Template Variables with Response Bodies HTML
$this -> view -> assign(
array(
'projects' => $projects -> send(),
'clients' => $clients -> send()
)
);
В качестве пояснения в этом фрагменте Request::send() вернет HTML
Результатом будет что-то похожее на:
<html lang="en">
<head>
<meta charset="utf-8">
<link rel="stylesheet"
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css">
</head>
<body>
<div class="container-fluid">
<!-- Sidebar -->
<div class="row">
<div class="col-sm-3 col-md-2 sidebar" id="sidebar" role="navigation">
<ul>
<li>Sidebar Item</li>
<li>Sidebar Item</li>
<li>Sidebar Item</li>
</ul>
</div>
</div>
<!-- Main Content -->
<div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main">
<html lang="en">
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css">
</head>
<body>
<div class="container-fluid">Component HTML</div>
</body>
</html>
</div>
</div>
</body>
</html>
Что, в этом примере, "просто" неправильно, в конце концов, в реальном Приложении у нас могут быть конфликты сценариев или правила CSS, портящие любой HTML, следующий за разделом, предназначенным для компонента (например, нижний колонтитул или другой последующий компонент) и т. Д....
Тем не менее, как компонент HTML должен происходить в HMVC?
Самой маленькой идеей, с которой я столкнулся, был бы этот "Мастер-контроллер" для анализа HTML-кода, полученного от каждого компонента, и получения от него только того, что ему действительно нужно, например, всего, что находится внутри отдельного DIV-обертки внутри <body></body>
,
Но я не видел ничего, даже отдаленно близкого к этому, во всем, что искал.
1 ответ
Идея HMVC заключается в том, что он предоставляет решение для создания виджетов с использованием MVC в JAVA. Это делается путем наложения нескольких виджетов MVC друг на друга (используя иерархию). Однако, как и во всех шаблонах проектирования, вы должны использовать их только для решения проблемы или создания столь необходимой структуры. Основная суть вашего вопроса подразумевает, что вы хотите использовать шаблон, просто для использования шаблона. Вы должны спросить себя: "Почему я хочу использовать этот шаблон и что он решает для меня?" Если ответ "у меня нет проблемы и я просто хочу использовать ее, потому что она кажется классной", тогда вы это делаете.
Практичность HMVC с PHP ограничена. Вы все еще можете использовать его в некоторой степени оригинальной идеи. Имейте в виду, что PHP/Web является средой без сохранения состояния, а Java - нет.
Главный контроллер (уровень 0 MVC) - Подконтроллеры (уровень 1 MVC) - Подконтроллеры (уровень N MVC)
Вид определяется контроллером, как и модель. Поэтому в каждом контроллере необходимо создать способ обработки входящего запроса, при необходимости передать его на другой уровень MVC и загрузить правильную модель / представление. Ваше беспокойство относительно ошибок CSS/Script, которые могут произойти. Этот шаблон основан на иерархии, поэтому, как программист, вы должны знать об этом и убедиться, что каждый нижний уровень MVC в иерархии может работать с уровнем выше.