Архитектурный подход к программированию
Архитектура — это принятие решений там, где появляется сложность. Если программа из 100 строк — архитектура не нужна. Когда система выходит за пределы одного часа работы одного человека — нужна.
Когда нужна архитектура
- Сложность системы превышает порог понимания одним человеком.
- Несколько разработчиков работают над общим кодом.
- Требуется надёжность: восстановление после ошибок, повторные запуски, мониторинг.
- Требуется развитие: новые фичи, замена компонентов.
Главные архитектурные решения
- Организация данных — самое важное. Какие сущности, какие связи, где живут.
- Обработка ошибок — как ловятся, логируются, восстанавливаются.
- Безопасность — куда складывать секреты, кто к чему имеет доступ.
- Именование — одна из сложнейших задач. Названия задают границы понимания.
- Связи между модулями — coupling/cohesion.
Принципы (по автору)
- В архитектуре нет единственно правильного решения — есть набор возможностей.
- Структура приложения — задел для архитектуры. Хорошая структура → простая архитектура.
- Типовые архитектуры переносятся из проекта в проект — есть смысл их знать.
- Изоляция, приватные поля, локальные структуры данных — то, что реально влияет на масштабируемость.
Связь структуры и архитектуры
Структура данных в основании модуля
↓
определяет, как модуль шарится между копиями
↓
определяет, можно ли размазать на потоки/машины/дата-центры
↓
это и есть архитектура
Антипаттерн: «архитектура» из паттернов на ровном месте
Application с 5 пользователями имеет:
- Hexagonal архитектуру с 4 портами
- Event Sourcing
- CQRS
- 12 микросервисов
→ это не архитектура, а cargo cult
🎓 Источники
- 🎓 [Архитектурный подход к программированию] · 2018-09-25 · YouTube
- «Архитектурная задача начинается с появлением сложности».
- «Давать имена — одна из важнейших архитектурных задач».
- Архитектура = принятие решений: данные, ошибки, безопасность.
- 🎓 [Основная задача синьора — структура приложения] · 2026-05-16 · YouTube
- Альтернативная позиция: структурный код не определяет архитектуру; её определяют низкоуровневые характеристики — идемпотентность, состояние, ссылки, локальные структуры данных в модулях.
- 🎓 [Архитектурные принципы из курса Metarhia] · 2023-12-06 · YouTube
- В Metarhia: autobinding в неймспейсы, мультипарадигменность, schema-first.