什么是 HMVC 模式?

在阅读 Kohana 的文档时,我发现3.0版本的主要区别在于它遵循 HMVC 模式,而不是像2.x 版本那样遵循 MVC 模式。Kohana 的文档和维基百科上关于这个的页面并没有给我一个清晰的概念。

那么问题来了: HMVC 模式是什么? 它与 MVC 有什么不同?

60797 次浏览

HMVC 与“基于组件”的调度方法密切相关。基本上,每个控制器都可以自己充当调度器,而不是只有一个委托给控制器的调度器。这将为您提供控制器的层次结构。这种设计更加灵活,可以更好地封装代码,但代价是更高的抽象性。康斯特鲁克特是围绕这种模式设计的。

请看这个答案: https://stackoverflow.com/questions/115629/simplest-php-routing-framework/120411#120411

Sam de Freyssinet (Kohana 开发者之一)写了一个相当 关于 HMVC 的深入文章的代码,它是什么,以及如何使用它。

链接死亡: 新链接 -https://web.archive.org/web/20160214073806/http://techportal.inviqa.com/2010/02/22/scaling-web-applications-with-hmvc/

至少在 Kohana,一个 hmVC 请求是一个“内部”服务的 HTTP 请求: 它不是通过网络发出的,而是由框架自己路由、分派和处理的。“ HMVC”和“ MVC”这两个名字的相似之处令人困惑,因为它们暗示了这两个术语之间的潜在联系,而这两个术语实际上并不存在: 一个术语不是对另一个术语的次要变体或修改,它们是完全不同的东西。(HMVC 也被描述为没有客户端 HTTP 请求的 Ajax。)Kohana 对“ HMVC”的强调和支持意味着该框架对基于 HTTP 的面向服务的体系结构有很强的支持。

这种体系结构模式的优势在于,由于对内部和外部请求使用相同的“调用约定”,因此在需要时将“内部”服务请求转换为“外部”请求或者相反转换是微不足道的。

虽然这是一个合理的架构模式,但是给它起一个自己的名字似乎是不必要的(Symfony2描述了同样的概念“ 子请求”) ,而且事实上这个名字似乎是一个错误的名称: 没有特别的要求或需要请求形成一个层次结构(除了每个命令式程序的标准调用图) ; 例如,请求可以很容易地是递归的。

[ 更新于2011年4月,2012年3月:扩大了对评论的回应。]

我目前正在开发自己的 PHP 5.3 HMVC 框架 翻译: 奇芳合金合金合金合金合金合金合金合金合金合金合金合金合金合金合金合金合金合金合金合金合金合金合金合金合金合金合金合金合金合金合金合金合金合金合金合金合金合金合金合金合金。由于我在 HMVC 上投入了大量的资金并进行了销售,我认为我可以提供一个不同的观点,也许可以更好地解释为什么应该使用 HMVC 以及它带来的好处。

使用 HMVC 架构最大的实际好处是内容结构的“小部件化”。例如,评论、评级、 Twitter 或博客 RSS 提要显示,或者电子商务网站的购物车内容显示。它本质上是一段内容,需要在多个页面之间显示,甚至可能在不同的位置显示,具体取决于主 HTTP 请求的上下文。

传统的 MVC 框架通常不能直接回答这些类型的内容结构,所以人们通常会复制和切换布局,使用自定义的帮助器,创建自己的小部件结构或库文件,或从主要请求的控制器中拉入不相关的数据来推送到视图并呈现部分内容。这些都不是特别好的选择,因为呈现特定内容或加载所需数据的责任最终会泄漏到多个区域,并在使用它的地方重复。

HMVC,或者具体地说,将子请求分派给 Controller 以处理这些职责的能力是显而易见的解决方案。如果您考虑一下您正在做的事情,它完全符合 Controller 结构。您需要加载一些有关注释的数据,并以 HTML 格式显示它们。因此,您向评论 Controller 发送一个带有一些参数的请求,它将与 Model 进行交互,选择一个 View,View 将显示内容。唯一的区别是,你想让评论内联显示在用户正在浏览的博客文章下面,而不是一个完全独立的完整的评论页面(尽管使用 HMVC 方法,你实际上可以使用同一个控制器同时服务内部和外部请求,正如俗话所说的“一石二鸟”)。在这方面,HMVC 实际上只是努力提高代码模块化、可重用性和维护更好的关注点分离的自然副产品。这就是 HMVC 的卖点。

因此,虽然 Sam de Freyssinet 的 TechPortal 文章在 HMVC 扩展方面很有意思,但是90% 以上使用 HMVC 框架的人并没有从中获得真正的、实际的、日常的好处。

HMVC 是层次模型视图控制器。在正常的 MVC 中,每个 GUI 对象都有自己的 MVC。但是与 HMVC 不同的是,父 GUI 对象和子 GUI 对象之间没有任何关系。 在 HMVC 中,每个 GUI 对象都可以访问它的子对象,每个子对象都可以访问它的父对象。

因此在每个视图中都有一个父视图,通过它可以访问它的父视图。 因为在每个控制器中都有一个父控制器,它可以通过这个父控制器将事件传递给父控制器(如果事件不在它的作用域内)

详情请按 给你

新链接是 这个地址