用户
 找回密码
 入住 CI 中国社区
搜索
查看: 6366|回复: 4
收起左侧

[讨论/交流] HMVC模式介绍

[复制链接]
发表于 2012-3-17 18:13:05 | 显示全部楼层 |阅读模式
本帖最后由 tinsn 于 2012-3-17 21:58 编辑

这个HMVC模式介绍通俗易懂。应该有助于理解HMVC工作原理吧。


原文:http://www.haogongju.net/art/665071

HMVC模式即Hierarchical-Model-View-Controller模式,也可以叫做Layered MVC.HMVC模式把客户端应用程序分解为有层次的父子关系的MVC。反复应用这个模式,形成结构化的客户端架构。如图1:

图1

对上图做一个解释:一个MVC模块由应用程序的一个模块抽象而成。其中很重要的一个概念就是Parent MVC,它可以对应界面上的实体,也可以是一个抽象的对象。设想有一个Windows Form应用程序,有一个框架(frame),此框架由菜单功能模块导航栏、状态栏、主工作区等部分组成,对应于HMVC,frame MVC 即Layer1 的parent MVC ;菜单MVC、导航栏MVC、状态栏MVC、主工作区 MVC处于第二层(图中只画了一个)。如果你觉得导航栏或主工作区的功能太复杂,也可以再细分成HMVC中的第三层,依次类推,可以扩展到n层,如果你愿意的话。

HMVC工作原理:Controller是功能模块的总控室,它负责和子Controller或父Controller通信,并通知它的View处理改变界面显示、Model处理一些业务逻辑或数据库访问操作。举个例子,假如要实现点击菜单项,刷新主工作区这样的功能。首先点击操作在菜单MVC的View里完成,菜单Controller捕获这个事件,发现是需要刷新主工作区,它处理不了,于是传给它的父Controller—Frame Controller处理,Frame Controller捕获这个事件,直接把它交给主工作区 Controller处理,主工作区 Controller捕获这个事件,让主工作区 View处理刷新操作。是不是觉得很麻烦?对于小型应用程序,应用HMVC模式的优点显现不出来,但是一旦你的应用程序很复杂,HMVC模式的优点就清晰可见。


层次的HMVC解决了客户层程序的复杂性,HMVC揭示了面向对象的优势。它的优点主要有:

  • 把程序分成了几个部分,降低了依赖性。
  • 支持鼓励重用代码,组件或者模块。
  • 在今后的维护中,提高了可扩展性。

 楼主| 发表于 2012-3-17 18:47:32 | 显示全部楼层
第一个问题找到答案了:
yinzhj_2002cn 发表于 2011-8-19 12:19
那能不能2个控制器继承同一个base的呢?

可以,看手册,扩展核心类一章
另外也是可以调用另外控制器的,自己include,自己new出来,不过很蛋疼的用法是不是,公用的方法还是自己写到类库或者扩展控制器吧,答案都是手册上


控制器之间不能互相调用,这个是作者定下的,这个没办法,呵呵

再说,每个controller都应该是独立,如果有相同或者类似的功能,可以用model,helper,library等,而不是写在另外一个controller中

这种情况就自己写个library就好了啊,所有控制器都可以用了,如果通用函数的话就写个help,和数据库有关的话就写在model里就好了,这不是缺点,是个规范而已,我觉得挺好了,自己写个library吧
发表于 2012-3-19 14:55:13 | 显示全部楼层
一直都在用HEX老大的HMVC呢
 楼主| 发表于 2012-3-20 22:38:33 | 显示全部楼层
呵呵,我也是用HEX老大的HMVC
发表于 2013-8-16 21:48:39 | 显示全部楼层
HEX  老大能给点指点吗  HMVC怎么分享

本版积分规则