Я пытаюсь понять, как работает цикломатическая сложность и как я могу избежать предупреждений. Да, я понимаю, что цель написания кода не в том, чтобы избежать произвольных предупреждений, но я хотел бы, по крайней мере, знать, что происходит, чтобы я мог решить, хорош код, который я вижу, или плох.
У меня есть функция, которая выглядит так:
protected function update($uuid, $data, $householdUuid, $androidId) {
$household = $this->householdService->getHouseholdByUuid($householdUuid);
$this->updatePeriod($household, $data);
$this->updateNickname($household, $data, $androidId);
$this->updateDateOrder($household, $data);
$this->updateCurrency($household, $data);
$this->updateAccounts($household, $data);
$household->save();
return $this->respondUpdated();
}
Это помечается как имеющее цикломатическую сложность 10. Как это возможно? Судя по документации, я бы оценил это как 1. Единственная возможность состоит в том, что PHPMD спускается вниз в различные вызовы методов.
Но если это так, то у меня нет возможности "исправить" этот метод. Как правило, я бы уменьшил сложность метода, извлекая меньшие вспомогательные методы. Этот метод уже был реорганизован в различные методы update(), чтобы исключить кучу условных обновлений, которые происходят. Первоначальный метод также имел цикломатическую сложность 10, и рефакторинг ничего не сделал.
Или, может быть, проблема проще - я запускаю PHPMD через непрерывную интеграцию, настроенную с Jenkins. Может ли быть проблема, когда PHPMD не использует самый последний код? У меня были несколько похожие проблемы, когда он помечал класс как имеющий слишком много строк после того, как я уже провел рефакторинг класса ниже ограничения количества строк.