Code Review мисты

Code Review мисты

Очень крутой спец

Давайте еще глубже посмотрим на код и выявим больше областей для улучшения, избегая при этом неконструктивной критики:



---


Важные недостатки


1. Логика brushText слишком запутана


Комментарий: Метод перегружен сложной логикой, выполняя сразу несколько задач: фильтрация, декорация, экстракция сущностей и обработка HTML. Это не только затрудняет понимание, но и делает метод трудно тестируемым. Нарушен принцип единственной ответственности (SRP).

Предложение: Разбейте метод на несколько более мелких функций с четко определенной ответственностью. Например:


extractEntities (для извлечения сущностей),


applyDecorations (для декорации текста),


filterContent (для фильтрации).



Пример рефакторинга:


private function applyDecorations(string $text): string { ... }

private function extractEntities(string $text): array { ... }


2. Дублирование кода


Пример:


$text = self::filterWhiteSpaces($text, $INPUT_TO_TEMP);

...

$text = self::filterWhiteSpaces($text, $TEMP_TO_DB);


Комментарий: Вызывается одна и та же функция с разными константами, но без пояснений, почему это необходимо дважды. Вероятно, можно избавиться от одного из вызовов.

Предложение: Либо объедините эти вызовы в один, либо добавьте подробные комментарии, объясняющие их необходимость, если они действительно нужны.


3. Проблема с модификацией параметров


Пример:


[$text, $users] = self::extractUsers($text, $INPUT_TO_TEMP);


Комментарий: Модификация входного параметра $text внутри функций опасна. Это делает код трудно предсказуемым, особенно если значение текста используется повторно после вызова.

Предложение: Лучше работайте с копиями данных, чтобы избежать неожиданных изменений в других частях программы:


$processedText = self::extractUsers($text, $INPUT_TO_TEMP);


4. Неправильное использование htmlspecialchars


$text = htmlspecialchars($text, ENT_COMPAT | ENT_HTML5, 'utf-8'); // срезать все HTML-тэги


Комментарий: Как уже упоминалось ранее, функция htmlspecialchars экранирует символы, но не удаляет HTML-теги. Это базовая ошибка понимания того, как работают функции обработки строк в PHP.

Предложение: Используйте strip_tags, если ваша цель — удаление тегов:


$text = strip_tags($text);


5. Неэффективное использование FILTER_DIRECTION


Пример:


$INPUT_TO_TEMP = FILTER_DIRECTION::INPUT_TO_TEMP;

$TEMP_TO_DB = FILTER_DIRECTION::TEMP_TO_DB;


Комментарий: Эти константы используются слишком очевидно. Не видно причин, по которым они нужны здесь, если код просто передает статические значения.

Предложение: Либо уберите их полностью и замените на обычные строки, либо добавьте логику, которая действительно оправдает их использование.


6. Проблема с именованием и типами


Пример:


public function brushText(string $text, bool $hasDecor): self


Комментарий: Метод возвращает self, что означает, что он должен возвращать объект текущего класса, но фактически возвращается строка $text. Это ошибка дизайна, которая может запутать других разработчиков.

Предложение: Если вы хотите, чтобы метод возвращал строку, явно укажите тип возврата string:


public function brushText(string $text, bool $hasDecor): string

---

Дополнительные предложения по улучшению:


1. Логическая ясность и структурирование


Метод должен быть проще и более читаемым. Это повысит его тестируемость и облегчит понимание для других участников команды.


Используйте блоки кода с ясной логикой — это поможет другим разработчикам быстрее понять ваш код.



2. Документация


Комментариев недостаточно, а те, что есть, часто неточны. Это важный момент, особенно в сложных алгоритмах. Добавьте описание того, что делает каждая основная часть метода.



3. Безопасность


В текущем коде экранирование HTML происходит, но это можно улучшить. Например, рассмотрите возможность добавления дополнительных проверок на возможные инъекции данных, если текст поступает из внешних источников.




---


Заключение


Этот код явно требует значительного улучшения.

Метод перегружен ответственностями, имеет дублирование, модифицирует входные данные, и в нем присутствуют архитектурные проблемы.

Чтобы исправить это, нужно провести серьезный рефакторинг, разделив логику на отдельные компоненты, улучшить читаемость и тестируемость, а также убедиться, что код безопасен для использования с любыми данными.


Report Page