|
HMVC模块化编程,可以提高代码重用。但是用了HMVC相当于在一个页面中,调用了几个控制器。而这些控制器间没办法共享数据。结果是:同一个页面中的几个模块间用到相同的数据时,都需要单独去数据库取。
以上论调,大家来讨论一下,是不是这样? | |
|
数据共享,可以用静态类特有的机制,将数据注册到静态类当中。
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")可以在任何类中穿行,畅通无阻。 代码现写,没有测试。 只有想不到,没有做不到, 模式是个壳子,灵活是关键,目的是关键 评分 | |
|
多控制器调用时脑残的做法,也可能有人会说在V中调用某一个控制器之类的,你可以使用Model来规避,或者我建议使用CSMV这种逻辑,通过一种service层来处理业务逻辑和定制钩子之类的。www.icvio.com,这个项目就是用这种逻辑开发的项目
| |
ihymk 发表于 2010年5月6日 12:24 数据放到内存里了,这个应该可以实现数据缓存,减轻db压力 | |
|
HMVC 一个页面只有一个控制器,但是可以多个 model。Model 返回的数据可以在控制器里共用,所以你说的问题也就不是问题了:)
| |
|
HMVC 可以实现模块之间共享数据吧,只要有这个机制就可以了。
| |
|
| |
|
| |
|
本帖最后由 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复制代码 复制代码 那么在同一个页面加载过程中,如果其他地方(模块)也使用 $db->select('id,email,username')->from('user')->where('username', 'paperen')->get()->row_array(); 匹配一下缓存数组是否有相同键值,有就不用再送sql去数据库了 当然只是在select的时候才会记录,但......这样的数组索引好像有点说不过去 | |