题
阅读 Kohana 的文档,我发现 3.0 版本的主要区别在于它遵循 HMVC 模式,而不是像 2.x 版本那样遵循 MVC。Kohana 文档中有关此内容的页面和维基百科上的页面并没有真正给我一个清晰的想法。
所以问题:什么是 HMVC 模式以及它与 MVC 有何不同?
解决方案
Sam de Freyssinet(Kohana 开发者之一)写了一篇相当 关于 HMVC 的深入文章, 、它是什么以及如何使用它。
其他提示
目前我在开发自己的PHP 5.3 HMVC框架的过程叫做 合金 。因为我投入巨资和HMVC卖,我以为我可以提供一个不同的观点,也许是为什么应该使用HMVC更好的解释和它带来的好处。
使用HMVC体系结构的最大实用优点是该内容结构的“widgetization”。一个例子可能是评论,评分,Twitter或博客RSS提要显示器,或购物车的内容对于电子商务网站的显示。它本质上是一条内容,需要在多个页面来显示,甚至可能是在不同的地方,这取决于主HTTP请求的上下文
传统的MVC框架一般不提供这些类型的内容结构的一个直接的答案,所以人们普遍结束了复制和开关的布局,使用自定义的助手,创建自己的小部件的结构或库文件,或从无关的数据拉主要要求控制器通过推到视图和局部呈现。这些都不是特别好的选择,因为呈现的内容或装载需要的数据的特定部分的责任最终泄漏到多个区域,并在它被使用的地方得到复制。
HMVC,或具体地,涉及派遣子请求发送到控制器来处理这些职责的能力是明显的解决方案。如果你觉得你在做什么,它究竟适合控制器结构。您需要加载有关评论的一些数据,并以HTML格式显示出来。所以,你发送到评论控制器的一些PARAMS的请求,将其与模型交互,选取一个视图,视图显示的内容。唯一的区别是你想要内嵌显示的评论,博客文章的用户,而不是观看一个完全独立的完整评论页面(虽然与HMVC办法,实际上你可以用相同的控制器服务内部和外部的要求和“杀下方两个鸟一石”,俗话说)。在这方面,HMVC是真的追求提高代码的模块化,可重用性,并保持关注更好的分离只是一个自然的副产品。这是HMVC的卖点。
因此,虽然山姆德弗雷西的TechPortal文章一>与HMVC外扩有趣的是,想一想,这不是在那里谁使用HMVC框架的人90%+打算从中获得真正的,实际的,一天到一天的效益。
HMVC是密切相关"的组成部分的基础"的方法,以调度。基本上,而不是具有一个调度员,其代表一个控制器,每个控制器可以作为一个调度员。这给你一个层次结构的控制器。设计更为灵活的,并导致更好的封的代码,但是在一个价格更高的抽象概念。 Konstrukt 设计这个模式。
也看到这个回答: https://stackoverflow.com/questions/115629/simplest-php-routing-framework/120411#120411
至少在 Kohana 中,HMVC 请求是“内部”服务的 HTTP 请求:它不是通过网络发布,而是由框架本身路由、分派和处理。名称“HMVC”和“MVC”的相似性令人困惑,因为它暗示了实际上并不存在的术语之间的潜在联系:一个不是另一个的微小变体或修改,它们是完全不同的东西。(HMVC 也被描述为没有客户端 HTTP 请求的 Ajax。)Kohana 的强调和支持“HMVC”意味着该框架对基于 HTTP 的面向服务的架构有强大的支持。
这种架构模式的优点是,由于内部和外部请求使用相同的“调用约定”,因此根据需要将“内部”服务请求转换为“外部”请求,反之亦然。
虽然这是一个合理的架构模式,但给它自己的名字似乎没有必要(Symfony2 描述了相同的概念“子请求”),事实上这个名字似乎用词不当:没有特定的要求或需要请求形成层次结构(除了每个命令式程序的标准调用图);例如,请求很容易是递归的。
[2011年4月、2012年3月更新: 扩展了对评论的回答。]