HMVC最大的缺陷!
HMVC模块化编程,可以提高代码重用。但是用了HMVC相当于在一个页面中,调用了几个控制器。而这些控制器间没办法共享数据。结果是:同一个页面中的几个模块间用到相同的数据时,都需要单独去数据库取。以上论调,大家来讨论一下,是不是这样? 数据共享,可以用静态类特有的机制,将数据注册到静态类当中。
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
数据共享,可以用静态类特有的机制,将数据注册到静态类当中。
全局应用,然后存储数据regist::set("aa", ...
数据放到内存里了,这个应该可以实现数据缓存,减轻db压力 HMVC 一个页面只有一个控制器,但是可以多个 model。Model 返回的数据可以在控制器里共用,所以你说的问题也就不是问题了:) HMVC 可以实现模块之间共享数据吧,只要有这个机制就可以了。 回复 2# BruceWolf
不是这样的吧?我一个页面,调用了多个module的话,不就有多个控制器吗?这些控制器间数据怎么共享? 回复 3# Hex
怎么实现呢? 回复Hex
怎么实现呢?
baiyuxiong 发表于 2010-5-2 20:32 http://codeigniter.org.cn/forums/images/common/back.gif
最简单,全局变量总可以做到吧?呵呵
想法大大的好 想法大大的好 本帖最后由 paperen 于 2012-3-9 13:20 编辑
我也有一个想法,扩展CI的DB实现查询缓存(或者可以这么叫),而不用像ihymk那样手动set与get
当
$user = $db->select('id,email,username')->from('user')->where('username', 'paperen')->get()->row_array();
时将会在DB实例内部进行登记,比方记录到一个数组中
$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的时候才会记录,但……这样的数组索引好像有点说不过去
页:
[1]
2