# 03 — Проектирование архитектуры

← [Главная](../README.md)

## Цель раздела

Научиться **собирать требования**, формулировать **NFR и SLA**, описывать систему моделью **C4** и фиксировать решения в **ADR**.

## Предварительно

- [02 — Компоненты](../02-komponenty/README.md)

## Время

**15–22 часа** на весь раздел

---

## Страницы раздела

| № | Тема | Время | Ссылка |
|---|------|-------|--------|
| 1 | Сбор требований | 4–5 ч | [sbor-trebovanij.md](sbor-trebovanij.md) |
| 2 | NFR и SLA | 3–4 ч | [nfr-i-sla.md](nfr-i-sla.md) |
| 3 | C4-модель | 4–6 ч | [c4-model.md](c4-model.md) |
| 4 | ADR — записи решений | 4–5 ч | [adr-resheniya.md](adr-resheniya.md) |

```mermaid
flowchart LR
  Req[Требования FR+NFR] --> C4[C4 диаграммы]
  C4 --> ADR[ADR спорные выборы]
  ADR --> Impl[Реализация в коде]
```

---

## Артефакты после раздела

| Артефакт | Минимум для учебного кейса |
|----------|----------------------------|
| Список FR/NFR | 5 FR + 5 NFR |
| C4 Context | 1 диаграмма |
| C4 Container | 1 диаграмма |
| ADR | 2 записи (например REST, PostgreSQL) |

Храните в `docs/architecture/` репозитория — версионируется в git.

---

## Принципы проектирования (кратко)

| Принцип | В облаке |
|---------|----------|
| **KISS** | Монолит до доказанной нужды в микросервисах |
| **YAGNI** | Не строить Kafka «на вырост» без нагрузки |
| **Separation of concerns** | Слои и границы сервисов |
| **Design for failure** | Всё падает — retries, timeouts, circuit breaker |

---

## Связь с жизненным циклом

Проектирование — **фаза 3** из [жизненного цикла](../01-osnovy/zhiznennyj-cikl.md). Возврат назад нормален: ADR «сменили БД» — обновили C4 и миграции.

---

## Самопроверка раздела

1. Чем FR отличается от NFR?  
2. Сколько уровней у C4 (названия)?  
3. Зачем ADR, если «и так все знают в Slack»?

---

## Дальше

→ [Сбор требований](sbor-trebovanij.md)
