TGStat
TGStat
Type to search
Advanced channel search
  • flag English
    Site language
    flag Russian flag English flag Uzbek
  • Sign In
  • Catalog
    Channels and groups catalog Regional compilations Thematic compilations Платные каналы Search for channels
    Add a channel/group
  • Ratings
    Rating of channels Rating of groups Posts rating
    Ratings of brands and people
  • Analytics
  • Search by posts
  • Telegram monitoring
  • Promotion
    Advertising through Yandex Business Advertising in channels through TGStat Agency Advertising on TGStat.ru website
Системный Аналитик

25 Jun, 10:04

Open in Telegram Share Report

✏️ Принципы разработки
KISS, Бритва Оккама, SSOT, DRY, YAGNI, SOLID


Зачем нужны

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

💡 Для системного аналитика принципы служат фильтром при сборе требований, позволяют снизить затраты ещё до написания кода


KISS (Keep It Simple, Stupid)

Решение должно быть максимально простым
Чем сложнее система, тем дороже изменения, тестирование и поддержка

KISS не означает примитивные решения
✅ А отказ от ненужного усложнения

Как применять СА

🔵не добавлять лишние сущности и процессы
🔵избегать универсальных решений без необходимости
🔵описывать требования максимально понятно
🔵сокращать количество исключений и специальных сценариев

Пример

❌ Спроектировать универсальный механизм уведомлений с 15 каналами доставки, шаблонизацией и правилами маршрутизации
✔️ Сначала реализовать email и push-уведомления, если нужны бизнесу

❌ Описывать 15 вариантов исключений для одного процесса
✔️ Описать общее правило обработки ошибок (fallback), покрывающее 95 % случае

Признаки нарушения KISS

▪️слишком много сущностей
▪️чрезмерная параметризация
▪️большое количество условий и исключений
▪️ сложность объяснения решения


Бритва Оккама

Не надо умножать сущности без необходимости
Если два решения равнозначно покрывают требования, выбирается то, у которого меньше сущностей и допущений

Отличие от KISS

🔸KISS говорит «делай просто»
🔸Бритва Оккама — «выбирай простое среди равных»

Примеры для СА


🟠Есть проблема производительности.
Необязательно сразу проектировать новый сервис или менять архитектуру. Возможно, достаточно оптимизировать запрос или
индекс

🟠При выборе интеграции: если данные можно получить через REST-агрегацию, не стоит предлагать внедрение ESB или CDC только из соображений «это современно».


SSOT (Single Source of Truth)

Для каждой информации должен существовать один источник истины

Если одинаковые данные существуют в нескольких местах, со временем они начинают расходиться

Где применяется


🔵требования
🔵схемы данных
🔵справочники
🔵бизнес-правила
🔵интеграционные контракты

Примеры в СА

🔵создавать единый глоссарий; в тексте требований использовать ссылки на термины, а не их определения
🔵справочные данные (списки валют, стран) выносить в общий раздел и ссылаться на него
🔵маппинг полей между системами хранить в едином файле (Swagger/OpenAPI или отдельной таблице), а не дублировать в сценариях

❌ Пример нарушения: правило «комиссия для клиентов из ЕС = 20 %» прописано в ТЗ, в UI-макете, в описании интеграции и в тест-кейсах.
При изменении ставки до 22 % три источника не обновляются → баг на релизе


DRY (Don’t Repeat Yourself)

Не повторять знания, логику или описание без необходимости

Дублирование приводит к изменениям во многих местах одновременно:
🟠одинаковые бизнес-правила
🟠повторяющиеся требования
🟠копирование схем данных
🟠одинаковая логика в нескольких процессах и тд

Примеры для СА


🔸одинаковые структуры API вручную описываются в нескольких документах
Лучше использовать единое описание и переиспользовать его
🔸в Use Cases применять include-сценарии для повторяющихся процедур (например, аутентификация описывается один раз)

Когда дублирование допустимо
Ради производительности (денормализация БД) или изоляции микросервисов (копирование DTO), но такое решение должно быть явно зафиксировано как исключение

❗️DRY не должен создавать избыточную сложность

Отличие DRY от SSOT


🔸SSOT — про данные: одна сущность (справочник, атрибут, значение) хранится в одном месте.
«где лежит истина?» (хранение)

🔸DRY — про логику: один алгоритм, правило или описание процесса не повторяется в разных местах.
«где выполняется действие?» (поведение)


YAGNI (You Aren’t Gonna Need It)

Не создавать функциональность заранее
Если функция не нужна сейчас — вероятно, её не нужно делать сейчас

Примеры для СА

🔵 вместо проектирования 20 возможных статусов процесса «на будущее» лучше реализовать только реально используемые статусы.
🔵на этапе уточнения задавать вопрос: «Если не сделать это сейчас, сможет ли бизнес работать?» Если да — требование переносится в бэклог.

❌ Типичная ошибка: путать гибкость системы и проектирование гипотетических сценариев


SOLID

SOLID — набор принципов проектирования, направленных на создание изменяемых и поддерживаемых решений

Интерпретация для СА

🔸SRP (Single Responsibility)

Требование должно иметь одну причину для изменения. Не следует смешивать в одном разделе расчёт зарплаты и отправку уведомлений — их нужно разделять

🔸 OCP (Open/Closed)

В требованиях новый сценарий должен дополнять, а не переписывать старый.
Вместо «если тип A, то скидка 10 %» лучше описать механизм правил, где для типа A задаётся правило, а для типа B можно добавить новое правило

🔸 LSP (Liskov Substitution)

Если в требованиях есть родительская роль («Клиент»), то её подтип («VIP-клиент») не должен нарушать предусловия системы (например, не требовать обязательный номер телефона, если у VIP его нет)

🔸 ISP (Interface Segregation)

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

🔸 DIP (Dependency Inversion)

Требования к модулям верхнего уровня не должны зависеть от деталей нижнего уровня.
Вместо «сохранять в таблицу Oracle INSERT'ом» следует писать «система сохраняет данные» — абстрагироваться от реализации

❗️SOLID помогает управлять сложностью, но избыточное применение может привести к переусложнению


📎 Материалы

1. Принципы для разработки: KISS, DRY, YAGNI, BDUF, SOLID, APO и бритва Оккама
2. Принципы разработки в системном анализе
3. 5 принципов читаемого кода: KISS, YAGNI, DRY, BDUF и Бритва Оккама
4. SOLID, DRY, KISS, YAGNI и др. принципы разработки, пугающие новичка в IT

#проектирование

➿➿➿➿➿➿➿➿➿➿

🧑‍🎓 Больше полезного в базе знаний по системному анализу

7.6k 0 134 35
Catalog
Channels and groups catalog Channels compilations Search for channels Add a channel/group
Ratings
Rating of Telegram channels Rating of Telegram groups Posts rating Ratings of brands and people
API
API statistics Search API of posts API Callback
Our channels
@TGStat @TGStat_Chat @telepulse @TGStatAPI
Read
Академия TGStat Telegram Research 2019 Telegram Research 2021 Telegram Research 2023
Contacts
Справочный центр Support Email Jobs
Miscellaneous
Terms and conditions Privacy policy Public offer
Our bots
@TGStat_Bot @SearcheeBot @TGAlertsBot @tg_analytics_bot @TGStatChatBot