CodeIgniter Model间调用和耦合性冲突问题
来源:互联网 发布:台湾中视源码 编辑:程序博客网 时间:2024/05/18 02:48
在一个Model中调用另一个Model的问题
公司的框架是基于CI开发的。用着很舒服。这几天自已搞个东西用的CI,发现很多问题,CI真的很不方便,问题很多。
CI模型中不对载入模型
比如在game_model.php这个模型中不能使用
$this->load->model('test');
这样的方式载入模型,其实是载入成功了。但是不能通过
$this->test->function();
这样调用。报错提示对像不存在。
可以通过
$CI =& get_instance();
$CI->test->function();这样的方式调用
解决方法
在system/libraries/Loader.php的第187行左右加入如下代码即可
$this->_ci_assign_to_models();
这个是调用CI自身的机制将新创建的对像引用到当前所有存在的对像中。
CI这块的代码比较饶。
不知道这是不是CI的BUG,还是说CI本身的格式要求就是不在model中调用model,
个人感觉如果不能在model中调用model那代码量会上升非常多,不同model间的接口和数据传递不能做到,model也真就成了只是处理数据库的一个东西了。程序的继承多态复用也就无从说起。
公司的框架直接是充许在model中调用model的。所以我之前一直不知道CI有这个约束。只是很奇怪,如果模型间不能相互调用那么控制器中势必要调用多个模型,并且在不同的模型方法中传递数据。控制器中一定会有大量的调用。当然一个流程下来还是蛮清晰的。但是如果充许在模型中调用模型可以把一次需要的数据处理好再返回给控制器。控制器中不需要了解模型内部的数据调用。只有在需要了解模型内部机制的时候去处理就OK了。相当于是对外部的一次封装。 当然模型间的耦合确实难以避免。
举个例子
取一个文章列表 同时取出对应的分类名称
比如我的做法是建两个模型,一个分类模型,一个文章模型
class article exten extends Model{
....
public function getArticleList()
{
$sql = 'select * from article'
...
$this->load->model('articleclass');
$articleclassList = $this->articleclass->getArticleclassList();
while($row = mysql_fetch_assoc($query))
{
$row['articleclassName'] = $articleclassList[$row['articleclassId']]['name'];
$list[] = $row;
}
return $list;
}
}
class articleclass exten extends Model{
....
public function getArticleclassList()
{
$sql = 'select * from articleclass'
...
while($row = mysql_fetch_assoc($query))
{
$list[$row['id']] = $row;
}
return $list;
}
}
我在模型中直接处理好了对关联数据的整合,外部控制器中可以很清晰的调用getArticleList就可以获取数据。并且对getArticleList这个方法可以加上缓存,很容易处理。
如果是在外部控制器对数据进行整理那么就必定需要循环articltlist对每条记录进行整理。一则是外部控制器很难看。二是没法对合并整理后的数据进行缓存。或者是需要再调用一个方法进行缓存的处理。首先就循环上来说多了一次循环。处理流程更繁琐。
- CodeIgniter Model间调用和耦合性冲突问题
- CodeIgniter 一个Model中调用另一个Model的问题
- 扩展CodeIgniter的表单验证(Form_validatioin)类和解决Model类调用callback_的问题
- codeigniter技巧——防止model-controller名字冲突
- CodeIgniter Model
- 耦合性和内聚性
- 耦合性和内聚性
- 关于单点登录和系统耦合性的一些问题
- Loki库:类型间耦合检测和去耦合
- 松耦合和紧耦合
- 公共头文件耦合性的问题
- 模态model窗口跟地图样式冲突的一些问题!
- ym——Android开发MVP模式(解决了View和Model的耦合)
- Android开发MVP模式(解决了View和Model的耦合)
- Android开发MVP模式(解决了View和Model的耦合)
- MVVM模式通过ViewModel实现view和model的低耦合
- Android开发MVP模式(解决了View和Model的耦合)
- Android开发MVP模式(解决了View和Model的耦合)
- find the kth largest element in a list and find the first k largest elements in a list
- 敏捷的核心:消除浪费,走向精益
- IT系统选型也要务实
- redis做带分页的列表缓存
- JSP+Tomcat 6.0 JDBC连接MySQL数据库设置
- CodeIgniter Model间调用和耦合性冲突问题
- local_listener与remote_listener详述
- Android拨打电话和发短信的简单程序
- 用“爱生活”来搜索周边的美食、娱乐热点,很快捷,出行必备
- java io
- 在服务器端创建文件(create a sequential file)
- Domino webService
- Linux中 .bashrc和profile的区别
- Domino webService