Обновить

Как на Python описать архитектуру сервисов и превратить её в код

Уровень сложностиПростой
Время на прочтение16 мин
Охват и читатели8.6K
Всего голосов 2: ↑2 и ↓0+4
Комментарии6

Комментарии 6

Я создал прототип, укладывающий код в граф. Рекомендую для ознакомления https://habr.com/ru/articles/1087078/

"описать архитектуру сервисов" - есть примеры когда это делают на RDF\OWL (вкл. онтологию как предметной области, так и frontend), или хотя бы описание UI (структура окошек и взаимодействие)?

Видимо должны появиться новые ai-языки для vibecoding на базе BPMN. Не попадались? Практичнее более верхнеуровневая надстройка, а не python\js\c.

RDF/OWL для описания предметной области встречал, но у меня задача немного другая: не построить универсальную онтологию системы, а описать исполняемую топологию — типизированные потоки данных, контракты узлов, связи, транспорт и границы сервисов — так, чтобы из этой модели можно было генерировать рабочий код для разных runtime.

Python здесь скорее язык сборки модели, а не язык самой архитектуры. Получившаяся модель от Python не зависит: сейчас из неё генерируются сервисы на Go, C++, Rust, Python и TypeScript. Поэтому теоретически сверху вполне может появиться и BPMN-подобный редактор, и AI-язык, и вообще другой DSL — если они транслируются в ту же модель.

С UI пока в эту модель не лезу. Мне кажется, там уже появляется другой набор сущностей и семантика взаимодействия, и я бы скорее связывал отдельную UI-модель с моделью сервисов через контракты, чем пытался описывать всё одной онтологией.

На более верхнеуровневые AI/BPMN-языки тоже смотрю с интересом. Я бы только разделял язык, удобный человеку/агенту для описания намерения, и достаточно строгую промежуточную модель, которую уже можно валидировать и из которой можно воспроизводимо генерировать код. У меня Service Architect сейчас как раз скорее про второй слой.

Я бы только разделял язык, удобный человеку/агенту для описания намерения, и достаточно строгую промежуточную модель, которую уже можно валидировать и из которой можно воспроизводимо генерировать код. 

Описание данных, алгоритмов (преобразований), да и интерфейсов (в крупную клетку) на RDF + онтологии (для каждого направления своя), далее логика "грубо" через базовые функции + SPARQL в направлении SPARQL-driven Programming и уже "шлифовка" vibecode (review только DSL \ SPARQL). Конечно принцип Model-first, включая детальную модель данных (в составе онтологии). Только исходная модель не совсем исполняемая, а только частично (каркас).

Понял. Получается, у нас общий Model-first подход, но разная граница исполнения.

У вас RDF/OWL задают более богатую семантическую модель, а SPARQL уже частично используется как язык логики поверх неё.

У меня модель уже: типы, потоки, контракты, связи и транспорт. Зато описанная часть ближе к execution IR: из неё можно воспроизводимо генерировать сервисы для разных runtime, сохраняя одинаковую семантику, но выражая её идиоматично для каждого из них. Бизнес-логика остаётся обычным кодом, потому что на уровне архитектуры мы обычно не опускаемся до деталей её реализации.

То есть у вас модель шире по смыслу, у меня — уже, но ближе к исполнению.

Спасибо, посмотрел — интересно. У нас, похоже, довольно близкая цель, но движение идёт с разных сторон.

У вас получается примерно код → AST → граф → диаграммы/контекст: граф восстанавливается из существующей кодовой базы и становится индексом структуры и зависимостей.

У меня направление скорее обратное: архитектурная модель → граф → сгенерированный код. Существенные связи, типы, потоки и границы сервисов задаются явно до генерации, а реализации бизнес-функций остаются обычным кодом.

Я тоже смотрел в сторону восстановления модели из AST, но пока мне не удавалось достаточно просто извлечь оттуда именно смысловые границы. AST хорошо показывает структуру программы и зависимости, но гораздо сложнее автоматически понять, где находится существенный этап бизнес-процесса, который стоит отдельно выделить на диаграмме как независимый блок, а где просто вспомогательная функция, преобразование данных или техническая обвязка. Формально корректный граф из AST довольно легко получить, а вот сделать его полезным для обсуждения архитектуры — уже заметно сложнее.

Я проводил эксперимент: дал агенту большой проект RTB платформы и попросил построить DSL на питоне. После нескольких уточнений он достаточно хорошо это сделал. Ему хорошо помогал валидатор и то, что можно было сгенерировать проект и скомпилировать его (это добавляло ему понимания). По началу он пошел переносить в граф AST очень подробно. Но потом я ему задал более четкие границы и получилось достаточно не плохо.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации