Другие принципы
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 добавляется новый код, но старый «технический долг» рядом никогда не трогается
Шпаргалка по другим принципам
| Принцип | Вопрос для проверки |
|---|---|
| SoC | UI, бизнес-логика и данные живут в разных слоях? |
| LoD | Модуль общается только с непосредственными соседями? |
| CoC | Явно описано только то, что отличается от стандарта? |
| APO | Оптимизация написана после измерения проблемы? |
| FF | Ошибка обнаруживается и выбрасывается сразу на входе? |
| BSR | После твоих правок код стал хоть немного чище? |