我试图了解 Cyclomatic Complexity 的工作原理以及如何避免警告。是的,我知道编写代码的目的不是避免任意警告,但我至少想知道发生了什么,这样我就可以决定我看到的代码是好是坏。
我有一个看起来像这样的函数:
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,重构什么也没做。
或者问题可能更简单——我正在通过与 Jenkins 建立的持续集成来运行 PHPMD。PHPMD 没有使用最新的代码会不会有问题?在我已经将类重构到行数限制以下之后,我遇到了一些类似的问题,它会将一个类标记为有太多行。