一个基于Hex-HMVC的模型扩展
首先这个需求是怎样产生的我发觉CI扩展hex-HMVC后,模型有点让我模糊,怎衡量模型放在相应modules/models下还是放app目录/models下?比如模块1中要调用user模型的get_all方法获取所有用户数据 模块2也要获取这些数据 那么若模块1,2的模型中都创建一个user模型实现各自的get_all方法会不会显得没有重用的味道?
hex提示说可以引入模型继承的概念,于是我尝试在hex的基础上进行扩展
主要修改了code/MY_Loader.php文件
343行 加入了
// 加载模块模块继承的原始模型
// @author paperen
$this->_ci_basemodel( $model );
1138行
/**
* 加载模块继承的基础模型
* 若果模型名称是user_module_model代表要加载user_model模型
* 模块中模型要继承原始模型的名称必须是 模型名称_module_model 这种形式
* @author paperen
* @param string $base_model
*/
private function _ci_basemodel( $base_model ) {
$module_tag = 'module';
$tmp_arr = explode( '_', $base_model );
if ( !in_array( $module_tag, $tmp_arr ) ) return;
$model_arr = array( );
foreach ( $tmp_arr as $str ) {
if ( $str == $module_tag ) continue;
$model_arr[] = $str;
}
$model_name = implode( '_', $model_arr );
if ( empty( $model_name ) ) return;
$this->model( $model_name );
}
实现效果
有一个模块叫user
modules/user/controllers/index.php
<?php
class User_Index_Module extends CI_Module
{
public function index() {
// user模型的get_all
$this->load->model( 'user_model' );
$this->user_model->get_all();
// 自身的方法test
$this->load->model( 'user_module_model' );
$this->user_module_model->test();
// 调用来自user_model中的get_all
$this->user_module_model->get_all();
}
}
该模块的models中有其一个模型
modules/user/models/user_module_model.php
class User_User_Module_model extends User_Model
{
public function test() {
echo '<p>' . __CLASS__ . ' ' . __FUNCTION__ . '</p>';
}
}
app的模型目录下存在user模型
application/models/user_model.php
class User_model extends CI_Model
{
public function get_all() {
echo '<p>' . __CLASS__ . ' ' . __FUNCTION__ . '</p>';
}
}
浏览器访问index.php/module/user/index结果为
User_model get_all
User_User_Module_model test
User_model get_all
希望对大家有用
这个扩展好~
强烈支持~ 支持一下。。。。。 Hex 发表于 2012-10-30 10:27 static/image/common/back.gif
这个扩展好~
强烈支持~
希望我这样扩展没有违背你或者hmvc的设计概念 paperen 发表于 2012-10-30 13:22 static/image/common/back.gif
希望我这样扩展没有违背你或者hmvc的设计概念
我做这个 HMVC 的初衷就是为了解耦,让每个module都没有任何耦合。
如果和其他地方有依赖,这就会造成耦合,但是也不能一味追求解耦,还是要具体问题具体分析。 Hex 发表于 2012-10-30 13:29 static/image/common/back.gif
我做这个 HMVC 的初衷就是为了解耦,让每个module都没有任何耦合。
如果和其他地方有依赖,这就会造成耦 ...
嗯 我还有待更深的理解 多谢hex的提醒 看了 ci和doctrine的配置但是那是老版本的ci2.x不知道怎么配置求大哥帮忙看了几天了不会原帖http://codeigniter.org.cn/forums/thread-14727-1-1.html
页:
[1]