HMVC和HTML组件化

时间:2014-12-26 11:54:10

标签: php html hmvc

我已经阅读了几篇关于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内的所有内容

但在我搜索的任何内容中,我都没有看到任何与此相关的内容。

1 个答案:

答案 0 :(得分:0)

HMVC背后的想法是它提供了一种在JAVA中使用MVC创建小部件的解决方案。这是通过将多个MVC小部件相互叠加(使用层次结构)来完成的。但是,与所有设计模式一样,您应该只使用它们来解决问题或创建急需的结构。你的问题的主要要点暗示你想要使用模式,只是使用模式。您应该问问自己“为什么我要使用这种模式以及它为我解决了什么?”#39;如果答案是'我没有问题,只是想使用它,因为它看起来很棒&#39;然后你就这样做了。

HMVC与PHP的实用性有限。你仍然可以在原始想法的某些方面使用它。请记住,PHP / Web是无状态环境,而Java则不是。

主控制器(MVC第0层) - 子控制器(MVC第1层) - 子控制器(MVC第N层)

视图由控制器决定,模型也是如此。因此,在每个控制器中,您需要创建一种方法来处理传入的请求,如果需要,可以将其传递给另一个MVC层,并加载正确的模型/视图。您对可能发生的CSS / Script错误的担忧。这种模式基于层次结构,因此作为编码器,您需要了解这一点,并确保层次结构中的每个较低的MVC层都可以使用上面的层。