Короткий ответ
#Что это такое
- Карта системы
- Структурированная запись компонентов программной системы, их вложенности, связей между ними и интерфейсов, через которые они общаются. У каждого элемента есть описание, написанное для читателя, который не открывает код, а за каждым неочевидным утверждением стоит файл и диапазон строк, из которых оно выведено.
- Если проще Письменный ответ на вопрос «из чего это сделано и что с чем разговаривает» — такой, что каждую строчку можно возвести к чему-то в коде.
Смысл иметь карту не эстетический. Дело в том, что множество обычных деловых решений — можно ли сменить поставщика, может ли этот человек уйти в отпуск, что сломается, если у того провайдера будет сбой, что передавать новой команде — упирается ровно в эти сведения, а в большинстве компаний они существуют только как то, что знает конкретный разработчик.
#Что в неё входит
Всё перечисленное ниже есть в проекте 1ADK, потому что инструкция анализа просит об этом явно. Карта, в которой есть только первая строка, — это картинка; карта, в которой есть все, пригодна тому, кого при этом не было.
| Элемент | На какой вопрос отвечает |
|---|---|
| Компоненты | Из чего состоит система? Сервисы, модули, базы данных, очереди, задания, расписания, фронтенды. |
| Вложенность | Что внутри чего — в приложении, в развёртывании, в данных. |
| Связи | Что что использует, от чего зависит, откуда читает, куда пишет или что реализует — и в каком направлении. |
| Интерфейсы | Как две вещи разговаривают на самом деле: адрес, очередь, канал и для чего нужна каждая операция. |
| Данные | Какие деловые объекты существуют, какую форму принимают и куда перемещаются. |
| Доказательства | Где всё перечисленное было найдено. Путь и диапазон строк, а не обещание. |
| Неизвестное | Что установить не удалось и почему это важно. |
| Охват | Какие части системы действительно смотрели — и какие нет. |
Последние две — те, которые большинство карт опускает, и именно они решают, можно ли на карту опереться. Карта без пробелов либо получена из полного анализа, либо тихо превратила свои пробелы в молчание, — а снаружи эти два случая выглядят одинаково.
#Почему это не схема
Архитектурные схемы полезны. Но это другой объект с другими способами ломаться.
| Архитектурная схема | Карта системы | |
|---|---|---|
| Откуда берётся | Из чьего-то понимания, нарисована руками | Выведена из анализа системы |
| Что означает прямоугольник | То, что имел в виду автор | Именованный компонент с типом и описанием |
| Как это проверить | Спросить автора | Открыть файл, на который она ссылается |
| Что происходит, когда система меняется | Она молча становится неверной | Следующий анализ сообщает о расхождении |
| В чём хороша | Объяснить замысел и спорить о том, чего ещё нет | Установить то, что есть |
Иметь стоит и то, и другое. Беда начинается, когда схемой, нарисованной полтора года назад, отвечают на вопрос о сегодняшней системе, — а на практике так и происходит, потому что другого документа в комнате нет.
#Как она выглядит
Система биллинга подписок на том уровне, на котором её читает владелец. Каждой строке здесь соответствует запись с типом, описанием и — там, где утверждение неочевидно, — файлом и диапазоном строк за ним.
Портал клиента ВЕБ-ПРИЛОЖЕНИЕ
→ читает из Сервис подписок
→ отправляет в Сервис биллинга /api/invoices POST
Сервис биллинга СЕРВИС
→ пишет в Основную базу payments, invoices
→ публикует в Очередь платежей
→ вызывает Платёжного провайдера ВНЕШНИЙ · REST
Обработчик просрочек ФОНОВЫЙ ОБРАБОТЧИК
→ читает Очередь платежей
→ пишет в Основную базу
Ночная выгрузка ЗАДАНИЕ ПО РАСПИСАНИЮ
→ читает из Основную базу
→ пишет в (получатель не установлен) НЕИЗВЕСТНО
Смотреть здесь нужно на последнюю строку. Обычный документ либо опустил бы выгрузку, либо угадал, куда уходит файл. Записанная как неизвестное, она становится вопросом, на который кто-то ответит за пять минут, — а пока не ответил, никто не строит план поверх догадки.
Демонстрационный проект — рабочая версия этого: вымышленная система биллинга, которую можно открыть, полистать и прочитать без аккаунта.
#Пять взглядов на одну систему
Те же компоненты, разложенные по тому вопросу, который вы задаёте.
Компонент одновременно принадлежит больше чем одной иерархии. Платёжный сервис находится внутри приложения, внутри развёртывания и внутри деловой функции — и это три разных родителя. Схлопывание их в одно дерево и делает большинство архитектурных документов почти правильными и никогда по-настоящему пригодными.
- Приложение — из чего программа состоит, на языке программ.
- Бизнес — что программа делает, на языке компании.
- Организация — кто чем владеет.
- Развёртывание — что где работает.
- Данные — какие сведения существуют и где они живут.
Практическая польза в том, что два разных человека получают прямой ответ из одной записи. Владелец, спрашивающий «что будет со счетами, если этот поставщик ляжет», и инженер, спрашивающий «что выкатывается вместе», читают одну карту через разные взгляды.
#Что делает её достоверной
Три свойства; карта без любого из них — это документ с лучшей вёрсткой.
-
Каждое утверждение можно открыть
Утверждение о компоненте называет файл и строки, из которых оно взято. Человек с репозиторием проверит это меньше чем за минуту и не спрашивая того, кто это составил.
-
Пробелы видны
То, что установить не удалось, записано открытым вопросом с причиной. Молчание никогда не означает «там ничего нет».
-
Устаревание заметно
У карты есть дата и запись об охвате, а следующий анализ сообщает, что изменилось с тех пор, — включая то, какие из её собственных прежних утверждений больше не подтверждаются.
#Чего карта не скажет
Чего это не делает
- Почему сделано именно так. Карта фиксирует то, что есть; рассуждение за решением живёт в людях, и анализ его не восстановит. Зато он покажет, о каких решениях нужно спросить.
- Хорошо ли это. Оценки качества нет. Карта, показывающая девять сервисов там, где хватило бы двух, не помечается как плохая архитектура — она просто показывает девять сервисов.
- Что происходит во время работы. Ничего не запускается, поэтому поведение под нагрузкой, реальные задержки и то, что видит конкретный пользователь, остаются вне её досягаемости.
- То, чего нет в репозитории. Зависимость, настроенная только в облачной консоли, обычно попадает в неизвестное, а не в компоненты.
- Безопасно ли это. Карта — не сканер уязвимостей и не пытается им быть.