@paper_castle
Фрилансер

Насколько целесообразно разбиение на функции и классы?

Есть кастомный проект без фреймворка, отдельная часть фукнционала состоит из нескольких переплетенных классов.
Слегка смущает то, что на 3 класса -> 1000 строк кода -> ~75 функций, активно вызывающих друг друга.
Автор этого добра заявляет, что это абсолютно нормальная практика - выносить каждые пару строк в отдельную функцию.
Нормальная ли?

Upd. Добавил часть одного из классов, имена методов немного обезличил в целях конфиденциальности )

<?php
class SomeClass {
    public function __construct($inner_class_name) {
        if (file_exists($inner_class_name)) {
            include($inner_class_name);
            $this->inner_class_name = new $inner_class_name;
        }
    }
    public function function_1() {
        $a = $this->function_2();
        $some_cond = $this->function_6($a);
        if ($some_cond) {
            $a = $this->function_3($a);
        } else {
            $a = $this->function_4($a);
        }
        if ($this->function_5($a)) {
            return $a;
        } else {
            return null;
        }
    }

    private function function_5($a) {
        $b = $this->function_7($a);
        if ($b && $this->function_8($b)) {
            return $this->function_9($a);
        } else {
            if ($this->function_10($b)) {
                return null;
            } else {
                return $this->function_11($b);
            }
        }
    }
    private function function_2() {}
    private function function_3($a) {}
    private function function_4($a) {}
    private function function_6($a) {}
    private function function_7($a) {}
    private function function_8($b) {}
    private function function_9($b) {}
    private function function_10($b) {
        return $this->inner_class_name->some_func_1($b);
    }
    private function function_11($b) {
        return $this->inner_class_name->some_func_2($b);
    }
}
  • Вопрос задан
  • 245 просмотров
Решения вопроса 1
ipatiev
@ipatiev Куратор тега PHP
Потомок старинного рода Ипатьевых-Колотитьевых
Это нормально.
Ну то есть про конкретный код нельзя сказать, не видя его, но " выносить каждые пару строк в отдельную функцию" - это нормально. Куда нормальнее, чем писать всю тысячу в одной.

Рекомендую найти видео "Как писать код, который понравится вашим тестам" с первой PHPRussia. Там очень доходчиво рассказывается про то, почему надо делать простые методы. Не только для тестов. А ещё и для повторного использования и для упрощения поддержки кода. Когда надо прочитать основную логику модуля, то даже сокращение в два раза (по одному методу вместо двух строк кода) уже сильно облегчает задачу.
А если уж даже тест понял, что делает ваш код, то человек поймёт и подавно :)

Как вам написали выше - все дело в именах методов. Если они информативные, то есть если конструкция
if ($this->function_7($a) && $this->function_8($b))
читается как связный английскй текст, то mission accomplished! Функции выполняют свою роль: легче всего читать код, которого нет. Вместо того, чтобы разбирать, что делает тот или иной код, можно просто прочитать небольшой текст на английском.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Автор этого добра заявляет, что это абсолютно нормальная практика - выносить каждые пару строк в отдельную функцию.
Нормальная ли?

Только ситхи возводят всё в абсолют. Без кода нельзя сказать, норма или нет.
В принципе - если эти функции так хорошо делятся, то почему бы и нет?

1000 строк кода на 3 класса - это не очень много. Это всего 300 строк на класс.
75 функций - это получается в среднем около 10-15 строк на функцию, что в принципе тоже ок.

По вашим словам больше ничего объективно сказать нельзя.
Ответ написан
zkrvndm
@zkrvndm
Архитектор решений
Посмотрите на имена функций, если по ним сразу понятно что делает каждая, то все нормально.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы