我已经阅读了几篇关于HMVC的文章,用PHP和其他语言,并且在所有这些文章中,这种模式的实现是关于有一个“主控制器”请求响应主体或更多内部或外部资源,使用cURL或流上下文,以便直接通过Response对象或通过自定义View Engine构建自己的资源,使用获得的HTML分配模板变量。
然而,所有这些文章都坚持技术概念,大多数时候他们都没有提到所有相关的观点。因此,我得出的结论是HMVC的基本概念,一般来说,MVC内部的MVC,无论是分层还是孤立地无缝工作,总是以相同的方式。
但是,如果每个子系统按照相同的方式以某种方式工作,那么这个“主控制器”的HTML组件化究竟会发生什么呢?它将需要最终的脚本,样式表甚至额外加价?
通过一个例子,它变得更容易理解:
考虑使用由N个组件构成的Bootstrap 3开发的应用程序,它们都使用相同的框架进行开发(因此它们与主应用程序的一部分完全相同),一个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并只获得它真正需要的东西,比如<body></body>
内特定包装DIV内的所有内容
但在我搜索的任何内容中,我都没有看到任何与此相关的内容。
答案 0 :(得分:0)
HMVC背后的想法是它提供了一种在JAVA中使用MVC创建小部件的解决方案。这是通过将多个MVC小部件相互叠加(使用层次结构)来完成的。但是,与所有设计模式一样,您应该只使用它们来解决问题或创建急需的结构。你的问题的主要要点暗示你想要使用模式,只是使用模式。您应该问问自己“为什么我要使用这种模式以及它为我解决了什么?”#39;如果答案是'我没有问题,只是想使用它,因为它看起来很棒&#39;然后你就这样做了。
HMVC与PHP的实用性有限。你仍然可以在原始想法的某些方面使用它。请记住,PHP / Web是无状态环境,而Java则不是。
主控制器(MVC第0层) - 子控制器(MVC第1层) - 子控制器(MVC第N层)
视图由控制器决定,模型也是如此。因此,在每个控制器中,您需要创建一种方法来处理传入的请求,如果需要,可以将其传递给另一个MVC层,并加载正确的模型/视图。您对可能发生的CSS / Script错误的担忧。这种模式基于层次结构,因此作为编码器,您需要了解这一点,并确保层次结构中的每个较低的MVC层都可以使用上面的层。