Другие принципы

SoC — Separation of Concerns

Разделение ответственностей

Смысл

Система должна быть разбита на части, каждая из которых решает одну конкретную задачу. В отличие от SRP, SoC работает на уровне слоёв и модулей: UI отдельно от бизнес-логики, бизнес-логика отдельно от работы с данными.

Индикаторы нарушения

  • SQL-запрос внутри JSX
  • Бизнес-правила в контроллере
  • Стили, завязанные на данные

LoD — Law of Demeter

Закон Деметры / «Не разговаривай с незнакомцами»

Смысл

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

Индикаторы нарушения

  • Цепочки вида order->getCustomer()->getAddress()->getCity() — знаешь структуру трёх чужих объектов
  • Модуль знает внутреннее устройство чужого класса

CoC — Convention over Configuration

Соглашение важнее конфигурации

Смысл

Фреймворк делает разумные вещи по умолчанию — называй классы и файлы предсказуемо, и конфигурировать почти ничего не нужно. Явно описываешь только то, что отступает от соглашения: модель User → таблица users сама, BlogPost с нестандартной таблицей articles → указываешь явно.

Индикаторы нарушения

  • Вручную прописано то, что фреймворк и так знает по умолчанию ($table = 'users', $primaryKey = 'id')
  • Структура проекта уникальна для каждого разработчика в команде

APO — Avoid Premature Optimization

Избегай преждевременной оптимизации

Смысл

Не оптимизируй код до того, как измерил проблему. «Преждевременная оптимизация — корень всех зол» (Кнут). Сначала работающий и читаемый код, потом — профилировщик, потом — оптимизация.

Индикаторы нарушения

  • Сложный кэш написан до того, как возникли проблемы с производительностью
  • Алгоритм усложнён «ради скорости» без замеров

FF — Fail Fast

Падай быстро

Смысл

Ошибки должны обнаруживаться и выбрасываться как можно раньше, а не замалчиваться и всплывать потом в непредсказуемом месте. Явный сбой в начале лучше тихой ошибки в конце.

Индикаторы нарушения

  • Функция принимает null и молча возвращает пустой результат
  • Валидация данных происходит только перед записью в БД, а не на входе

BSR — Boy Scout Rule

Правило бойскаута

Смысл

Оставляй код чище, чем нашёл. Не нужно рефакторить всё сразу — достаточно улучшить то, что ты затронул в рамках текущей задачи.

Индикаторы нарушения

  • В каждом PR добавляется новый код, но старый «технический долг» рядом никогда не трогается

Шпаргалка по другим принципам

ПринципВопрос для проверки
SoCUI, бизнес-логика и данные живут в разных слоях?
LoDМодуль общается только с непосредственными соседями?
CoCЯвно описано только то, что отличается от стандарта?
APOОптимизация написана после измерения проблемы?
FFОшибка обнаруживается и выбрасывается сразу на входе?
BSRПосле твоих правок код стал хоть немного чище?