FlowConsole .fc.ts DSL (Preview)
Узнайте, как текущий Preview DSL в `.fc.ts` описывает планируемую архитектуру в C4-like нотации в FlowConsole.
Эта страница описывает текущий Preview DSL в .fc.ts, который используется в
FlowConsole и публичном примере eShop. API будет меняться по мере
развития Preview DSL.
FlowConsole по умолчанию ищет файлы, имя которых соответствует шаблону
.fc.<ext>, например .fc.ts, и рассматривает их как файлы архитектурной
модели. arch/eshop.fc.ts — один из таких файлов: в нём целевая архитектура
системы описывается исходным кодом в C4-like нотации, а не в отдельном формате
диаграммы.
В текущем Preview основной способ описания модели — runtime DSL, используемый в
примере eShop: сущности задаются типизированными object literal-объектами, а
взаимодействия описываются fluent-методами потока.
В этой документации публичный пример выступает источником истины:
Что покрывает эта документация
Эта документация специально сфокусирована на текущем Preview runtime DSL в
.fc.ts:
- шаблон файлов
.fc.<ext>, который FlowConsole по умолчанию трактует как архитектурную модель - типизированные object literal-сущности:
User,ComputerSystem,ReactApp,RestApi - иерархия через
systemиbelongsTo - описание потоков через
sendsRequestTo,then,getDataFrom,executesRequestиinParallel - семантика связи через
ConnectionOptions.kind
Анатомия модели eShop
Пример eShop организован как простой top-down файл:
const customer: User = { name: "Customer", description: "Online shopper" };
const admin: User = { name: "Store Admin", description: "Manages catalog and orders" };
const eshop: ComputerSystem = { name: "eShop Platform" };
const frontend: Container = { name: "Frontends", system: eshop };
const gateway: Container = { name: "API Gateway", system: eshop };
const services: Container = { name: "Backend Services", system: eshop };
const data: Container = { name: "Data Stores", system: eshop };
const messaging: Container = { name: "Event Bus", system: eshop };Сначала файл задаёт акторов и верхнеуровневые границы системы. Затем под этими границами описываются конкретные приложения, API, хранилища, воркеры и внешние интеграции. Задача такого файла — зафиксировать планируемую архитектурную модель в репозитории, чтобы её можно было версионировать, ревьюить и загружать в FlowConsole.
Как FlowConsole читает .fc.ts как модель
FlowConsole извлекает архитектурную структуру прямо из файла:
- Типизированные объявления создают узлы.
systemиbelongsToсоздают вложенность и контейнерные границы.- Flow-методы создают связи и упорядоченные шаги потока.
inParallelсохраняет параллельные ветки внутри одного пользовательского сценария.ConnectionOptions.kindменяет семантику связи: синхронный вызов, асинхронная работа, публикация события или зависимость.
То есть файл — это не исходник диаграммы. Это читаемая, версионируемая архитектурная модель целевой системы, которую FlowConsole затем может визуализировать, публиковать и сравнивать с реальностью.
Пример потока
Checkout-сценарий в eShop хорошо показывает основной стиль взаимодействий:
customer.sendsRequestTo(webApp, "checkout")
.then(webApp).sendsRequestTo(apiGw, "POST /orders")
.sendsRequestTo(orderingApi, "create order")
.inParallel(
() => orderingApi.sendsRequestTo(orderingDb, "INSERT order", { kind: "dependency" }),
() => orderingApi.sendsRequestTo(orderEvents, "publish OrderCreated", { kind: "event" }),
() => orderingApi.sendsRequestTo(basketApi, "clear cart")
);Один такой блок уже описывает:
- актор, который запускает взаимодействие
- путь запроса через UI и API
- запись в базу данных
- публикацию события
- побочный эффект в другом сервисе
Следующие шаги
- Откройте справочник API, чтобы увидеть точные типы сущностей, поля и flow-методы.
- Откройте руководство по eShop, чтобы пройти полный walkthrough с плейсхолдерами под скриншоты из продукта.