Есть ли какой-либо вред для функций, которые выстроили вместо многострочной? Например, я написал файл класса для подключения базы данных 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); }
Будет ли это в конечном итоге сталкиваться с проблемами? Или их называют одной секцией за раз, как если бы они были на их собственной линии?
Благодарю.
Использование цепных методов в одной строке, подобной этой
return $this->db->prepare("$query")->execute()->fetch(PDO::FETCH_OBJ)->$object;
это то, что Роберт Мартин называет «Train Wrecks» в « Чистом коде» (pg 98/99) . Трудно читать и «обычно считается неаккуратным», и его следует избегать для более читаемых
$statement = $this->db->prepare("$query"); $statement->execute(); $result = $statement->fetch(PDO::FETCH_OBJ); return $result->$object;
Обратите внимание, что я исправил код в фрагменте выше, поскольку ваш однострочный шрифт не будет работать, потому что execute
возвращает логическое значение , поэтому вы не можете вызвать его fetch
:
bool PDOStatement::execute ([ array $input_parameters ] )
Другими словами, вы не можете писать это как однострочное утверждение в любом случае.
Также обратите внимание, что метод Chaining очень часто является нарушением Закона Деметры , в котором говорится, что
метод M объекта O может вызывать только вызовы методов следующих типов объектов:
- O сам
- Параметры M
- любые объекты, созданные / созданные в M
- Прямые объекты O
- глобальная переменная, доступная O, в объеме M
Не следовать LoD обычно приводит к Mockfests в вашем UnitTests и делает ваше приложение жестко связано с гораздо большим количеством классов, чем это необходимо, что, в свою очередь, ухудшает повторное использование и увеличивает время, необходимое для изменений (между прочим).
Императивный код всегда вызывается в ожидаемом порядке. Не о чем беспокоиться, кроме, может быть, если код читабельен или нет. В случае, когда линия очень длинная, вы можете ее обернуть несколькими строками, но примеры, которые вы показываете, выглядят хорошо для меня.
Если по какой-либо причине соединение с базой данных выходит из строя, это может вызвать FATAL_ERROR, потому что один из объектов вернет false.