KISS, Бритва Оккама, SSOT, DRY, YAGNI, SOLID
Зачем нужны
Инженерные принципы это не строгие правила, а ориентир
Помогают:
KISS (Keep It Simple, Stupid)
Решение должно быть максимально простым
Чем сложнее система, тем дороже изменения, тестирование и поддержка
KISS не означает примитивные решения
Как применять СА
Пример
Признаки нарушения KISS
Бритва Оккама
Не надо умножать сущности без необходимости
Если два решения равнозначно покрывают требования, выбирается то, у которого меньше сущностей и допущений
Отличие от KISS
Примеры для СА
Необязательно сразу проектировать новый сервис или менять архитектуру. Возможно, достаточно оптимизировать запрос или
индекс
SSOT (Single Source of Truth)
Для каждой информации должен существовать один источник истины
Если одинаковые данные существуют в нескольких местах, со временем они начинают расходиться
Где применяется
Примеры в СА
При изменении ставки до 22 % три источника не обновляются → баг на релизе
DRY (Don’t Repeat Yourself)
Не повторять знания, логику или описание без необходимости
Дублирование приводит к изменениям во многих местах одновременно:
Примеры для СА
Лучше использовать единое описание и переиспользовать его
Когда дублирование допустимо
Ради производительности (денормализация БД) или изоляции микросервисов (копирование DTO), но такое решение должно быть явно зафиксировано как исключение
Отличие DRY от SSOT
«где лежит истина?» (хранение)
«где выполняется действие?» (поведение)
YAGNI (You Aren’t Gonna Need It)
Не создавать функциональность заранее
Если функция не нужна сейчас — вероятно, её не нужно делать сейчас
Примеры для СА
SOLID
SOLID — набор принципов проектирования, направленных на создание изменяемых и поддерживаемых решений
Интерпретация для СА
Требование должно иметь одну причину для изменения. Не следует смешивать в одном разделе расчёт зарплаты и отправку уведомлений — их нужно разделять
В требованиях новый сценарий должен дополнять, а не переписывать старый.
Вместо «если тип A, то скидка 10 %» лучше описать механизм правил, где для типа A задаётся правило, а для типа B можно добавить новое правило
Если в требованиях есть родительская роль («Клиент»), то её подтип («VIP-клиент») не должен нарушать предусловия системы (например, не требовать обязательный номер телефона, если у VIP его нет)
Лучше иметь несколько специализированных эндпоинтов, чем один универсальный с множеством обязательных полей
Требования к модулям верхнего уровня не должны зависеть от деталей нижнего уровня.
Вместо «сохранять в таблицу Oracle INSERT'ом» следует писать «система сохраняет данные» — абстрагироваться от реализации
1. Принципы для разработки: KISS, DRY, YAGNI, BDUF, SOLID, APO и бритва Оккама
2. Принципы разработки в системном анализе
3. 5 принципов читаемого кода: KISS, YAGNI, DRY, BDUF и Бритва Оккама
4. SOLID, DRY, KISS, YAGNI и др. принципы разработки, пугающие новичка в IT
#проектирование


