收藏本站 Archiver
    请 后使用快捷导航
    没有账号?入住 CI 中国社区
    查看: 16142|回复: 18

    [优化] HMVC最大的缺陷!

    [复制链接]
    楼主
    发表于 2010年3月20日 10:12:03 | 只看该作者 回帖奖励 |倒序浏览 |
    HMVC模块化编程,可以提高代码重用。但是用了HMVC相当于在一个页面中,调用了几个控制器。而这些控制器间没办法共享数据。结果是:同一个页面中的几个模块间用到相同的数据时,都需要单独去数据库取。

    以上论调,大家来讨论一下,是不是这样?
    推荐
    发表于 2010年5月6日 12:24:46 | 只看该作者
    数据共享,可以用静态类特有的机制,将数据注册到静态类当中。
    PHP复制代码
    class regist
    {
    public $date;
    public function set($name,$value){ self::$data[$name]=$value}
    public function get($name){return self::$data[$mame];}
    }
    复制代码

    全局应用,然后存储数据regist::set("aa","bb");
    拿数据regist::get("aa")可以在任何类中穿行,畅通无阻。
    代码现写,没有测试。
    只有想不到,没有做不到, 模式是个壳子,灵活是关键,目的是关键

    评分

    参与人数 2 威望 +4 理由
    Hex + 2 我很赞同
    saturn + 2 赞同

    查看全部评分

    推荐
    发表于 2017年1月16日 21:14:58 | 只看该作者
    多控制器调用时脑残的做法,也可能有人会说在V中调用某一个控制器之类的,你可以使用Model来规避,或者我建议使用CSMV这种逻辑,通过一种service层来处理业务逻辑和定制钩子之类的。www.icvio.com,这个项目就是用这种逻辑开发的项目
    推荐
    发表于 2017年10月2日 12:14:43 | 只看该作者
    ihymk 发表于 2010年5月6日 12:24
    数据共享,可以用静态类特有的机制,将数据注册到静态类当中。

    全局应用,然后存储数据regist::set("aa", ...

    数据放到内存里了,这个应该可以实现数据缓存,减轻db压力
    沙发
    发表于 2010年4月7日 23:37:56 | 只看该作者
    HMVC 一个页面只有一个控制器,但是可以多个 model。Model 返回的数据可以在控制器里共用,所以你说的问题也就不是问题了:)
    藤椅
    发表于 2010年4月8日 19:05:16 | 只看该作者
    HMVC 可以实现模块之间共享数据吧,只要有这个机制就可以了。
    板凳
    楼主| 发表于 2010年5月2日 20:31:59 | 只看该作者
    回复 2# BruceWolf


    不是这样的吧?我一个页面,调用了多个module的话,不就有多个控制器吗?这些控制器间数据怎么共享?
    报纸
    楼主| 发表于 2010年5月2日 20:32:12 | 只看该作者
    回复 3# Hex


    怎么实现呢?
    地板
    发表于 2010年5月2日 22:02:56 | 只看该作者
    回复 Hex


    怎么实现呢?
    baiyuxiong 发表于 2010年5月2日 20:32



    最简单,全局变量总可以做到吧?呵呵
    8
    发表于 2012年2月7日 09:28:46 | 只看该作者

    想法大大的好
    9
    发表于 2012年3月6日 13:06:21 | 只看该作者
    想法大大的好
    10
    发表于 2012年3月9日 13:19:49 | 只看该作者
    本帖最后由 paperen 于 2012年3月9日 13:20 编辑

    我也有一个想法,扩展CI的DB实现查询缓存(或者可以这么叫),而不用像ihymk那样手动set与get

    PHP复制代码

    $user = $db->select('id,email,username')->from('user')->where('username', 'paperen')->get()->row_array();
    复制代码

    时将会在DB实例内部进行登记,比方记录到一个数组中
    PHP复制代码

    $query_cache = array (
    'select id,email,username from user where username="paperen"' => 数据
    )
    复制代码

    那么在同一个页面加载过程中,如果其他地方(模块)也使用 $db->select('id,email,username')->from('user')->where('username', 'paperen')->get()->row_array(); 匹配一下缓存数组是否有相同键值,有就不用再送sql去数据库了

    当然只是在select的时候才会记录,但......这样的数组索引好像有点说不过去
    下一页 »
    12 下一页
    返回列表
    您需要登录后才可以回帖 登录 | 入住 CI 中国社区

    本版积分规则

    AltStyle によって変換されたページ (->オリジナル) /