我误解了什么吗?
我说下面有模型方法:
public function product($user_id,$action){
$this->db->select('product_id');
$this->db->from('products');
$this->db->where('user_id', $user_id);
$query = $this->db->get();
$counter = 0;
switch($action){
case 'ids':
foreach($query->result() as $row){
data['ids'][$counter] = $row->product_id;}
return $data;
break;
case 'count':
return $query->num_rows();
break;
}
}
以上是否被视为可重复使用的方法,因为我可以将其用于2个目的?
或者不是,将它们分成两个单一的方法更好吗?
可重用的方法更像是这样:
public function get_id($table,$value){
$id = $table.'_id';
$query = $this->db->get_where($table, array($id => $value));
}
我为我的表和PK(ID)使用简单的名称。例如,'用户'表格会有' user_id'。 '产品'表格会有' product_id'
答案 0 :(得分:0)
说实话,我从来没有听说过一种被称为可重复使用的方法。我听说过类(CI上下文:模型和库),但从来没有听说过特定的方法。通常,可重用的东西的标志是依赖关系被管理并阻止tight coupling 。对于CI中的类很难做,也可能依赖于您的代码结构,因为CI应用程序往往具有内在紧密耦合。
我可以告诉你的是,从方法到课程的良好代码的标志是原则分离。对用户执行CRUD操作的类不应该处理诸如登录用户之类的auth函数 - 两者可以交互但不应该在一起。通过扩展,方法不应该尝试做太多。在您的情况下,您不仅通过使用switch语句使代码更加冗长,而且通过使用相同的方法处理两个不同且不同的操作,使得维护代码变得更加困难。
这样的代码也可能是一个问题:
public function get_id($table,$value){
$id = $table.'_id';
$query = $this->db->get_where($table, array($id => $value));
}
因为如果您决定将一个表更改为最后没有_id
,那么您必须(1)仅为该表引入新函数(2)删除_id
标记并使用此方法更新每个项目的参数$table
。为什么不直接传递$table
名称并放弃这一额外步骤?
所以在我看来,尽管只要管理依赖关系,所有方法都是可重用的,但是应该考虑其他编码实践。引入新方法无需任何费用。