baiyuxiong 发表于 2010-3-20 10:12:03

HMVC最大的缺陷!

HMVC模块化编程,可以提高代码重用。但是用了HMVC相当于在一个页面中,调用了几个控制器。而这些控制器间没办法共享数据。结果是:同一个页面中的几个模块间用到相同的数据时,都需要单独去数据库取。

以上论调,大家来讨论一下,是不是这样?

ihymk 发表于 2010-5-6 12:24:46

数据共享,可以用静态类特有的机制,将数据注册到静态类当中。
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")可以在任何类中穿行,畅通无阻。
代码现写,没有测试。
只有想不到,没有做不到, 模式是个壳子,灵活是关键,目的是关键

尚途科技 发表于 2017-1-16 21:14:58

多控制器调用时脑残的做法,也可能有人会说在V中调用某一个控制器之类的,你可以使用Model来规避,或者我建议使用CSMV这种逻辑,通过一种service层来处理业务逻辑和定制钩子之类的。www.icvio.com,这个项目就是用这种逻辑开发的项目

hrxf168 发表于 2017-10-2 12:14:43

ihymk 发表于 2010-5-6 12:24
数据共享,可以用静态类特有的机制,将数据注册到静态类当中。

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

数据放到内存里了,这个应该可以实现数据缓存,减轻db压力

BruceWolf 发表于 2010-4-7 23:37:56

HMVC 一个页面只有一个控制器,但是可以多个 model。Model 返回的数据可以在控制器里共用,所以你说的问题也就不是问题了:)

Hex 发表于 2010-4-8 19:05:16

HMVC 可以实现模块之间共享数据吧,只要有这个机制就可以了。

baiyuxiong 发表于 2010-5-2 20:31:59

回复 2# BruceWolf


   不是这样的吧?我一个页面,调用了多个module的话,不就有多个控制器吗?这些控制器间数据怎么共享?

baiyuxiong 发表于 2010-5-2 20:32:12

回复 3# Hex


   怎么实现呢?

Hex 发表于 2010-5-2 22:02:56

回复Hex


   怎么实现呢?
baiyuxiong 发表于 2010-5-2 20:32 http://codeigniter.org.cn/forums/images/common/back.gif


    最简单,全局变量总可以做到吧?呵呵

muyeyifan 发表于 2012-2-7 09:28:46


想法大大的好

liyi 发表于 2012-3-6 13:06:21

想法大大的好

paperen 发表于 2012-3-9 13:19:49

本帖最后由 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
查看完整版本: HMVC最大的缺陷!