Архитектура программного обеспечения
Что это такое
Архитектура программного обеспечения — набор решений, которые дорого менять потом. К ним относятся границы между частями системы, владение данными, форма развёртывания и осознанно принятые компромиссы. Это не диаграмма из прямоугольников и не выбранный фреймворк, а небольшое число решений, с которыми всё остальное вынуждено жить.
Почему это важно
Большая часть боли в зрелой системе — структурная, а не локальная. Изменение, которое должно было тронуть один файл, трогает шесть, потому что два модуля делят одну схему. Исправление ошибки требует согласованного релиза, потому что два сервиса развёртывались как один. Функция добавляется медленно, ведь никто не помнит, зачем существует граница. Эти издержки появляются постепенно и не видны ни в одном отдельном коммите — именно поэтому их никто не оспаривает. Система остаётся изменяемой после ухода её авторов только тогда, когда решения о границах принимают осознанно и записывают рассуждения.
Что в этом треке
- Границы и связанность (01-cs-fundamentals/25-software-architecture/01-boundaries-and-coupling) — где разделить систему и как измерить, помогло ли разделение.
- Владение данными и состоянием (01-cs-fundamentals/25-software-architecture/02-data-and-state-ownership) — как дать каждому фрагменту данных одного владельца и чего на самом деле стоит общее состояние.
- Форма развёртывания (01-cs-fundamentals/25-software-architecture/03-deployment-shape) — что обязано поставляться вместе, что может поставляться отдельно и что покупает изоляция отказов.
- Документирование решений (01-cs-fundamentals/25-software-architecture/04-documenting-decisions) — как записать контекст, варианты и последствия, чтобы следующий читатель знал почему.
Предварительные требования
- Паттерны проектирования (01-cs-fundamentals/18-design-patterns)
- Чистый код (01-cs-fundamentals/08-clean-code)
Что читать дальше
- Микросервисы (05-backend-data/12-microservices) — названный архитектурный стиль, который эта запись намеренно оставляет за скобками: он нужен, когда граница совпадает с единицей развёртывания.
- Конкурентность и асинхронное программирование (01-cs-fundamentals/05-concurrency-async-programming) — почему общее изменяемое состояние — самая важная граница.
- Принципы SOLID (01-cs-fundamentals/09-solid-principles) — те же правила связанности в масштабе одного класса.