一个内衬类功能,做或不做?

时间:2012-05-13 10:29:09

标签: php pdo

将功能排成一行而不是多线功能会有什么危害吗?例如,我为PDO数据库连接编写了一个类文件。我为它写的所有功能都是一个排列的。我还没有遇到任何错误,但是如果有滞后或什么的话会突然出现吗?

以下是一些功能。

public function getObject($query, $object) {
  return $this->db->prepare("$query")->execute()->fetch(PDO::FETCH_OBJ)->$object;
}

public function getArray($query) {
  return $this->db->prepare("$query")->execute()->fetchAll(PDO::FETCH_NUM);
}

public function insertArray($query, $array) {
  return $this->db->prepare("$query")->execute($array);
}

这最终会遇到问题吗?或者他们一次被称为一个部分,好像他们在自己的线上?

感谢。

3 个答案:

答案 0 :(得分:5)

在一行中使用链式方法,如下所示

return $this->db->prepare("$query")->execute()->fetch(PDO::FETCH_OBJ)->$object;

Robert MartinClean Code (pg 98/99)所谓的“火车残骸”。它很难阅读并且“通常被认为是草率的”并且应该避免更具可读性

$statement = $this->db->prepare("$query");
$statement->execute();
$result = $statement->fetch(PDO::FETCH_OBJ);
return $result->$object;

请注意,我更正了上面代码段中的代码,因为您的单行将工作,因为execute returns a boolean,因此您无法在其上调用fetch

  

bool PDOStatement::execute ([ array $input_parameters ] )

换句话说,无论如何,你不能把它写成一行语句。

另请注意,方法链接通常违反Law of Demeter,其中声明

  

对象O的方法M只能调用以下类型对象的方法:

     
      
  • O本身
  •   
  • M的参数
  •   
  • 在M
  • 中创建/实例化的任何对象   
  • O的直接组件对象
  •   
  • 一个全局变量,可由O访问,范围为M
  •   

不遵循LoD通常会导致单元测试中的Mockfest,并使您的应用程序与必要的更多类紧密耦合,这反过来会损害可重用性并增加更改所需的时间(除其他外)。

答案 1 :(得分:1)

命令行代码将始终按预期顺序调用。没有什么可担心的,除非代码可读或不可读。如果该行非常长,您可能希望将其包装为多行,但您显示的示例对我来说看起来不错。

答案 2 :(得分:0)

如果由于某种原因与数据库的连接失败,则可能导致FATAL_ERROR,因为其中一个对象将返回false。