作者tkdmaf (皮皮快跑)
看板PHP
标题[心得] 基於CI的model,不同资料表或资料选择的替换模式。
时间Wed Jul 20 23:07:08 2011
其实敝人对於设计模式大致还有很多的不了解。
只是就model的方法因为实在觉得不断的开方法一直写也不是个对策。
尤其对应到不同的资料表就要重设一次model也挺麻烦的。
之前有做共用继承某些特定模式,但事实上有的时候对资料的搜寻条件并不是那麽
的单一或单纯。
以下针对取得某笔单一资料的做法提供参考。
my_model.php(direct is models)
-------------------------------
class my_model extends model{
var table;
function my_model(){
parent::model();
}
function select_row($id,$ob_model = 'md_user'){
$this->load->library($ob_model);
$this->$ob_model->db = $this->db;
return $this->$ob_model->row($id);
}
}
md_user.php(direct is libraries)
--------------------------------
class md_user{
var $db;
var $table = 'user';
function md_user(){
}
function row($id){
$this->db->where('id',$id);
$query = $this->db->get($this->table);
if($query->num_rows() != 0)
return $query->row();
return false;
}
}
主程式使用时:
假设设定model:$this->load->model('my_model','MYMODEL',TRUE);
function show_user_data(){
$data['row'] = $this->MYMODEL->select_row($id,'md_user');
$this->load->view('show_user_data',$data);
}
这个模式的写法是说,在主程式仅需要载入一个model。
而不需要为了不同的model去写很多model(往往其实不同的model档案功能都差不多)
方法上来说,取得单笔资料就是一个select_row()的功能。
至於功能要传回什麽,全看library的物件怎麽去阐述需要的条件。
有的时候可能是关联式资料的查询回传。
有的时候也许会是复合性条件。
但不管是什麽,只要是取得多笔资料可能就统一行为叫做select_query()
取得单笔就统一行为叫做select_row()
至於怎麽查,查询的条件,查什麽资料表,就交给library物件去实做就行了。
之所以会写这个其实只是最近写ci觉得针对不同的查询要再开新的method真的不是
个好的策略。而且会造成model物件过度复杂化。
里头的功能写太多,单纯回头看起来要嘛也不过就是要个物件集合。
要嘛也不过就是要一个单一资料物件。
何不乾脆就把主功能纯化掉。
把不同的功能交给不同的物件去处理就好了。
重要的是:我要的就只是个资料结果而已。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.104.131.235
※ 编辑: tkdmaf 来自: 59.104.131.235 (07/20 23:08)
1F:→ superpai:不用datamapper吗...?很方便说 07/20 23:19
2F:推 liaosankai:团队开发,导入ORM是必要的,效能和效率如熊掌与鱼(叹) 07/21 00:48
3F:→ liaosankai:1F所提的datamapper目前版本有支援CI2以上吗? 07/21 00:49
4F:→ superpai:有啊 正在用 07/21 06:05
6F:→ appleboy46:最後更新版本 1.8.2 2011/06/07 Release 07/21 12:20
7F:推 hazih:Codelgniter sparks 是? 07/21 15:04
8F:推 amosa:datamapper 应该不是用再分散式资料库架构? 07/22 17:13
9F:→ amosa:不适用* 再分散式资料库架构? 07/22 17:14
10F:→ amosa:不适用* 在*分散式资料库架构? ..(暗..) 07/22 17:15
11F:→ liaosankai:不懂楼上的意思?原PO好像没提到分散式资料库架构 07/22 21:06
12F:→ tkdmaf:amosa该不是发生....键盘爆走事件? 07/22 21:41